WebApi: Comment passer l'état du filtre au contrôleur?

Je tire des données utilisateur dans le filtre d'action, et je pourrais utiliser certaines de ces données dans l'action d'un contrôleur, mais je ne sais pas exactement comment passer des données d'un filtre à un contrôleur. Dans MVC, j'utiliserais probablement session ou HttpContext.Éléments, mais il n'est pas disponible dans l'api web. Une autre option consiste à utiliser ThreadStatic, mais je pense qu'il doit y avoir une meilleure solution?

26
demandé sur j0k 2013-02-25 06:21:57

1 réponses

Vous pouvez utiliser Request.Properties dictionnaire de le faire.

Dans le filtre:

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

, puis vous pouvez le récupérer dans le contrôleur:

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

L'avantage de cette approche est que l'instance de requête actuelle est disponible partout dans le pipeline D'API Web, de sorte que vous pouvez accéder à cet objet, c'est-à-dire dans le formateur ou MessageHandler.

53
répondu Filip W 2013-02-25 03:05:38