我在动作过滤器中提取了一些用户数据,并且可以在控制器的操作中使用某些数据,但不完全确定如何将数据从过滤器传递到控制器。 在MVC中,我可能会使用session或HttpContext.Items,但它在web api中不可用。另一种选择是使用ThreadStatic,但我认为必须有更好的解决方案吗?
答案 0 :(得分:58)
您可以使用Request.Properties
字典来执行此操作。
在过滤器中:
MyType myObject = //initialize from somwhere
actionContext.Request.Properties.Add("mykey", myObject);
然后你可以在控制器中检索它:
object myObject;
Request.Properties.TryGetValue("mykey", out myObject);
//cast to MyType
此方法的优点是当前请求实例在Web API管道中的任何位置都可用,因此您也可以访问此对象,即在Formatter或MessageHandler中。