- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在为 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/
是否可以在 IExceptionFilter 中访问 ActionArguments? 根据上面的图片,异常过滤器在可以访问它们的 Action 过滤器之后运行。所以我不明白他们为什么不能。 在 Ac
我正在为 WebApi Controller 实现 AuthorizationFilterAttribute,但我似乎无权访问传递到 Controller 的参数: 在 MVC4 中,这工作正常: p
背景: 我想使用通过 Ninject 注入(inject)的 IAuthenticationFilter 实现来验证对我的 Web API 的 POST 请求。要验证请求,我需要访问请求正文。 问题:
我希望创建一个实现 IAsyncActionFilter 的过滤器,它将从当前请求上下文的 ActionParameters 及其 Result 中检索数据。我正在使用自定义属性 MyLogAttri
我正在编写一个 OnActionExecuting 操作过滤器,我想对该功能进行单元测试。 过滤器需要做的一件事是对传递给过滤器的操作参数执行一些验证。 我从 actionContext.Action
我是一名优秀的程序员,十分优秀!