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

アップデート

AnonymousAllowedAttribute実際には、 メソッドでマークされたアクションのいずれかがAuthorizeCoretrueを返すか、可能であれば実行しないかどうかが必要です(つまり、オーバーライドメソッドを意味します)。

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 に答える