要通过Id授予对项目的GET请求,我会在自定义AuthorizeAttribute
中查询该项目,以验证经过身份验证的用户是否具有访问权限。为防止在ApiController
操作中重复查询,我希望将对象从AuthorizeAttribute
传递给操作。
由于在AuthorizeAttribute
绑定程序运行之前在管道中调用了ActionArgument
,因此我无法通过HttpActionContext.ActionArguments
传递对象。我也很谨慎地将它序列化为一个查询字符串并可能在长度限制内运行。
传递项目的一个选项是将其存储在HttpContext.Current.Items
中,并在操作中检索时将其强制转换。我已经读过,即使在异步操作中这也会起作用,但似乎有很多建议反对使用Items
字典。
我应该只是重新查询动作中的项目吗?使用Items
字典是否合适?为此目的使用ActionFilterAttribute
是否适合允许访问HttpActionContext.ActionArguments
,即使我正在使用它进行授权?还有另一个我忽略的向量吗?
答案 0 :(得分:1)
使用Properties
的{{1}}字典。 http://msdn.microsoft.com/en-us/library/system.net.http.httprequestmessage.properties(v=vs.110).aspx
答案 1 :(得分:0)
我使用此代码
protected override bool AuthorizeCore(System.Web.Http.Controllers.HttpActionContext actionContext)
{
BaseApiController baseApi = actionContext.ControllerContext.Controller as BaseApiController;
baseApi.Property = 10;
}