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 に答える