Подтвердить что ты не робот

WebApi: как передать состояние от фильтра к контроллеру?

Я извлекаю некоторые пользовательские данные в фильтр действий и могу использовать некоторые из этих данных в действии контроллера, но не совсем уверен, как передавать данные из фильтра на контроллер. В MVC я бы, вероятно, использовал сеанс или HttpContext.Items, но он недоступен в веб-api. Другой вариант - использовать ThreadStatic, но я думаю, что должно быть лучшее решение?

4b9b3361

Ответ 1

Вы можете использовать словарь Request.Properties для этого.

В фильтре:

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

И затем вы можете получить его в контроллере:

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

Преимущество такого подхода заключается в том, что текущий экземпляр запроса доступен повсюду в конвейере веб-API, поэтому вы можете получить доступ к этому объекту, то есть в Formatter или MessageHandler тоже.