我正在为 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 值。)