4

我需要检查一个动作是否具有特定属性,我需要通过以下方法进行:

protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext) {

}

我知道我可以在这里检查:

public override void OnAuthorization(AuthorizationContext filterContext) {

    filterContext.ActionDescriptor.IsDefined(typeof(AnonymousAllowedAttribute), true)
 ...
}

有谁知道我怎样才能得到ActionDescriptor对象System.Web.HttpContextBase

更新

实际上,我想要任何标有AnonymousAllowedAttributeAuthorizeCore方法的操作返回 true 或者如果可能不运行(我的意思是我的覆盖方法)。

4

1 回答 1

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];
    }
}

全球.asax:

protected void Application_Start()
    {
        ....
        RegsterFilterProviders(FilterProviders.Providers);
    }

    private void RegsterFilterProviders(FilterProviderCollection providers)
    {
        providers.Add(new AuthorizeFilterProvider());
    }

现在,如果您的任何操作未标记[AnonymousAllowed]应用程序认为它被标记为[Authorize]
PS:不要忘记标记[AnonymousAllowed]您的登录和注册操作 :)

于 2012-08-21T13:27:36.520 回答