我正在拉动一些用户数据的动作过滤器,并且可以在控制器的操作中使用一些数据,但不完全确定如何将数据从过滤器传递到控制器。
在MVC中,我可能会使用会话或HttpContext.Items,但它不可用于web api。另一个选择是使用ThreadStatic,但我认为必须有更好的解决方案?
在MVC中,我可能会使用会话或HttpContext.Items,但它不可用于web api。另一个选择是使用ThreadStatic,但我认为必须有更好的解决方案?
解决方法
您可以使用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中。