6

我正在为 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")
       /// ... 
   }
}

但是在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"]
        /// ...
    }
}

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

4

1 回答 1

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"];

     }
  }

希望这有帮助!

于 2014-06-18T19:49:55.793 回答