在Controller Action中访问Action Filter的数据

Gau*_*ain 17 asp.net-mvc

[ApiBasicAuthorize]
public ActionResult SignIn()
{

}
Run Code Online (Sandbox Code Playgroud)

我有这个名为ApiBasicAuthorize的自定义过滤器.是否可以在控制器动作SignIn中访问ApiBasicAuthorize的数据(属性等)?

如果没有,我如何将数据从过滤器传递到控制器操作?

Jer*_*ell 25

有一个名为items的字典附加到HttpContext对象.使用此字典存储请求期间跨组件共享的项目.

public override void OnAuthorization(AuthorizationContext filterContext)
{
    filterContext.HttpContext.Items["key"] = "Save it for later";

    base.OnAuthorization(filterContext);
}
Run Code Online (Sandbox Code Playgroud)

然后在您的代码中的任何地方稍后请求...

var value = HttpContext.Current.Items["key"];
Run Code Online (Sandbox Code Playgroud)

  • @goths - 嗨,你能解释为什么你选择`HttpContext.Items`而不是`RouteData`?另见:http://stackoverflow.com/a/1809541/538387谢谢 (2认同)

Pra*_*sad 6

    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        var rd = filterContext.RouteData;

        //add data to route
        rd.Values["key"]="Hello";

        base.OnAuthorization(filterContext);
    }



public ActionResult(string key)
{
 //key= Hello
return View();
}
Run Code Online (Sandbox Code Playgroud)