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值.)
您看过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)
希望这有帮助!