c# - WebApi AuthorizationFilterAttribute : ActionArguments are empty

标签 c# asp.net-mvc-4 asp.net-web-api

我正在为 WebApi Controller 实现 AuthorizationFilterAttribute,但我似乎无权访问传递到 Controller 的参数:

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

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

最佳答案

你看过this的解决方案了吗? 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"];

     }
  }

希望这对您有所帮助!

关于c# - WebApi AuthorizationFilterAttribute : ActionArguments are empty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14736149/

相关文章:

c# - UWP FolderPicker.PickSingleFolderAsync 因 COMException/E_FAIL 而失败

javascript - 从 AJAX post 访问 C# Controller 中的表单数据

c# - 如何使用 DropDownList 绑定(bind)到 WebGrid razor asp net mvc 4 中的模型?

javascript - 选择选项的一个值后 Controller 响应

c# - WMI 重启远程机器

javascript - 无法从@Url.Action 访问变量

c# - 如何在 Razor 的部分 View 中获取 HTMLPREFIX

asp.net - 将 Visual Studio 2015 中的 ASP.NET Web API 身份验证添加到现有项目

c# - 检测到客户端已关闭连接

c# - 具有 linq 查询和存储表达式错误的 Entity Framework