2013-02-25 12 views
23

Sto prelevando alcuni dati utente nel filtro azione, e potrei usare alcuni di quei dati nell'azione di un controller, ma non esattamente sicuro come passare i dati da un filtro a un controller. In MVC probabilmente userei la sessione o HttpContext.Items, ma non è disponibile in web API. Un'altra opzione è usare ThreadStatic, ma penso che ci sia una soluzione migliore?WebApi: come passare lo stato dal filtro al controller?

risposta

46

È possibile utilizzare il dizionario Request.Properties per farlo.

Nel filtro:

MyType myObject = //initialize from somwhere 
actionContext.Request.Properties.Add("mykey", myObject); 

E poi è possibile recuperarlo nel controller:

object myObject; 
Request.Properties.TryGetValue("mykey", out myObject); 
//cast to MyType 

Il vantaggio di questo approccio è che l'istanza richiesta di corrente è disponibile in tutto il Web API pipeline, in modo da poter accedere a questo oggetto, ad esempio nel Formatter o MessageHandler.

+0

L'oggetto My Request non ha Proprietà, solo Params. C'è una differenza? E non esiste direttamente all'interno di filterContext, ma in filterContext.HttpContext. –

+0

quindi si ha a che fare con il filtro MVC non con il filtro API Web: i primi vengono utilizzati con la pipeline ASP.NET MVC e sono membri di system.web.mvc, mentre i secondi vengono utilizzati con la pipeline dell'API Web ASP.NET e sono membri del sistema .web.http. Non confonderli, sono componenti diversi –

+0

Ah, errore mio. –

Problemi correlati