27

我在动作过滤器中提取了一些用户数据,并且可以在控制器的动作中使用其中的一些数据,但不完全确定如何将数据从过滤器传递到控制器。在 MVC 中,我可能会使用 session 或 HttpContext.Items,但它在 web api 中不可用。另一种选择是使用 ThreadStatic,但我认为必须有更好的解决方案?

4

1 回答 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 回答