WebApi AuthorizationFilterAttribute:ActionArguments为空

mik*_*dge 5 c# asp.net-mvc-4 asp.net-web-api

我正在为WebApi控制器实现AuthorizationFilterAttribute,但我似乎无法访问传递给控制器​​的参数:

在MVC4中,这很好用:

public class MyMVCController : Controller
{
    [CanAccessMyResourceApi]
    public MyViewModel Get(int id)
    {
       //...
    }
}

public class CanAccessMyResourceMVCAttribute : CanAccessAttributeBase
{
   public override void OnAuthorization(AuthorizationContext filterContext)
   {
       var param = filterContext.Controller.ValueProvider.GetValue("id")
       /// ... 
   }
}
Run Code Online (Sandbox Code Playgroud)

但是在WebAPI中,我认为参数应该在ActionArguments中,但是这里的"param"是空的:

public class MyWebApiController : ApiController
{
   [CanAccessMyResourceWebApi]
   public MyViewModel Get(int id)
   {
      //...
   }

}

public class CanAccessMyResourceWebApiAttribute : AuthorizationFilterAttribute 
{
    public override void OnAuthorization(HttpActionContext filterContext)
    {       
        // the debugger shows that ActionArguments is empty:
        var param = filterContext.ActionArguments["id"]
        /// ...
    }
}
Run Code Online (Sandbox Code Playgroud)

传递到控制器的参数是否可以在其他地方使用?(我验证了当我删除过滤器属性时控制器的操作正确获取Id值.)

ody*_*yth 0

您看过StackOverflow 页面上的解决方案吗?

具体来说:

var variable = HttpContext.Current.Request.Params["parameterName"];

public class CustomAuthorizeAttribute : AuthorizeAttribute
  {
     protected override bool IsAuthorized(System.Web.Http.Controllers.HttpActionContext actionContext)
     {
        var clientId = actionContext.ControllerContext.RouteData.Values["clientid"];

     }
  }
Run Code Online (Sandbox Code Playgroud)

希望这有帮助!