Web Api:如何将状态从过滤器传递给控制器​​?

时间:2013-02-25 02:21:57

标签: asp.net-web-api

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

1 个答案:

答案 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中。