我在动作过滤器中提取了一些用户数据,并且可以在控制器的动作中使用其中的一些数据,但不完全确定如何将数据从过滤器传递到控制器。在 MVC 中,我可能会使用 session 或 HttpContext.Items,但它在 web api 中不可用。另一种选择是使用 ThreadStatic,但我认为必须有更好的解决方案?
问问题
12288 次
1 回答
63
你可以使用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 中访问该对象。
于 2013-02-25T03:05:38.177 回答