【发布时间】:2018-05-27 20:14:28
【问题描述】:
我正在尝试在 MVC4/Razor 中创建自定义授权属性,但在自定义授权属性下运行的“AllowAnnoymous”属性存在问题(它似乎忽略了它)。这一切都很好,很漂亮,因为我找到了一个解决方案(见下文),方法是检查控制器或操作是否包含允许匿名属性,如果是,则允许通过。
但是,我看到当我创建“AuthorizeAttribute”类并尝试实现“OnAuthorization”覆盖时,它将对象处理程序设置为“AuthorizationContext”类型,但在下面的示例和许多其他示例中,我已经在这里找到,似乎不应该使用“AuthorizationContext” - 而应该是“HttpActionContext”。虽然我试图用“HttpActionContext”替换它,然后覆盖失败,说没有合适的方法。关于我错过/做错了什么的任何想法?
Example Found Here (By Jammer)
private static bool SkipAuthorization(HttpActionContext actionContext)
{
Contract.Assert(actionContext != null);
return actionContext.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any()
|| actionContext.ControllerContext.ControllerDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
}
public override void OnAuthorization(HttpActionContext actionContext)
{
base.OnAuthorization(actionContext);
}
我的代码
private override void OnAuthorization(AuthorizationContext filterContext) // Not sure how to change this to HttpActionContext
{
if (filterContext == null) throw new ArugmentException("filterContext");
if (!AllowAnnonymous(new HttpActionContext()))
{
throw new HttpResponseException(HttpStatusCode.UnAuthorized);
}
else
{
base.OnAuthorization(filterContext);
}
}
【问题讨论】:
标签: c# asp.net-mvc-4 authorization