我需要检查某个操作是否具有特定属性,我需要在以下方法中执行此操作:
protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) {
}
我知道我可以在这里查看:
public override void OnAuthorization(AuthorizationContext filterContext) {
filterContext.ActionDescriptor.IsDefined(typeof(AnonymousAllowedAttribute), true)
...
}
是否有人知道如何使用ActionDescriptor
对象获取System.Web.HttpContextBase
?
更新
实际上我想要的是,标有AnonymousAllowedAttribute
AuthorizeCore
方法的任何操作都返回true或者如果可能的话不运行(我的意思是我的覆盖方法)。
答案 0 :(得分:3)
要执行您想要的操作,您需要在global.asax中编写并注册新的FilterProvider。 例如:
public class AuthorizeFilterProvider:IFilterProvider
{
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
if (!actionDescriptor.IsDefined(typeof(AnonymousAllowedAttribute), true))
return new Filter[] {new Filter(new AuthorizeAttribute(), FilterScope.Action, 0), };
return new Filter[0];
}
}
global.asax中:
protected void Application_Start()
{
....
RegsterFilterProviders(FilterProviders.Providers);
}
private void RegsterFilterProviders(FilterProviderCollection providers)
{
providers.Add(new AuthorizeFilterProvider());
}
现在,如果您的任何操作未标记为[AnonymousAllowed]
,则应用程序会将其标记为[Authorize]
PS:不要忘记标记[AnonymousAllowed]
您的登录并注册操作:)