2011-08-12 8 views
12
[ApiBasicAuthorize] 
public ActionResult SignIn() 
{ 

} 

Mam niestandardowy filtr o nazwie ApiBasicAuthorize. Czy możliwy jest dostęp do danych ApiBasicAuthorize (właściwości itp.) W działaniu kontrolera SignIn?Uzyskiwanie dostępu do danych filtru działania w działaniu kontrolera

Jeśli nie, w jaki sposób przekazać dane z filtra do działania kontrolera?

+0

która metoda ty nadrzędne w authrize_Attribute. możesz dodać dane do słownika trasy, pokaż nam więcej swojego kodu. –

+0

Nadpisuję metodę OnAuthorization (AuthorizationContext filterContext). –

Odpowiedz

17

Istnieje słownik zwany elementami dołączonymi do obiektu HttpContext. Użyj tego słownika do przechowywania elementów udostępnionych w komponentach podczas żądania.

public override void OnAuthorization(AuthorizationContext filterContext) 
{ 
    filterContext.HttpContext.Items["key"] = "Save it for later"; 

    base.OnAuthorization(filterContext); 
} 

Następnie gdziekolwiek w kodzie później w żądaniu ...

var value = HttpContext.Current.Items["key"]; 
+1

Nawet odpowiedź Praveena działa, ale zaznaczam to jako odpowiedź, ponieważ HttpContext.Items jest bardziej odpowiedni do tego celu zamiast RouteData.Values ​​ –

+2

@goths - Hi, czy mógłbyś wyjaśnić, dlaczego wybrałeś 'HttpContext.Items' przez' RouteData '? Zobacz także: http://stackoverflow.com/a/1809541/538387 Dziękuję – Tohid

+0

Witam @goths, tak też jestem ciekawy dlaczego ten pierwszy jest bardziej "odpowiedni" niż ten drugi? Wygląda na to, że oboje służą temu samemu celowi, więc zastanawiasz się, jakie ograniczenia lub intencje oddzielają te dwie rzeczy? – Funka

5
public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     var rd = filterContext.RouteData; 

     //add data to route 
     rd.Values["key"]="Hello"; 

     base.OnAuthorization(filterContext); 
    } 



public ActionResult(string key) 
{ 
//key= Hello 
return View(); 
} 
Powiązane problemy