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