5

何らかの理由で、メソッドのみOnAuthorizationが呼び出されていますが、呼び出されていAuthorizeCoreません。
これは私がそれを呼び出す方法です:

[AuthorizeWithRoles(Roles = "Affiliate")]
public string TestOnlyAffiliate()
{
     return "ok";
}

これが実際の属性です。

public class AuthorizeWithRolesAttribute : AuthorizeAttribute
{

    public string Roles { get; set; }

    //
    //AuthorizeCore - NOT INVOKING!
    //
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        return true;
    }
    public  void OnAuthorization(AuthorizationContext filterContext)
    {

    }
}
4

2 に答える 2

10

オーバーライドすることは想定されていませんOnAuthorization。潜在的なキャッシングの問題と呼び出しを扱いますAuthorizeCore

http://aspnetwebstack.codeplex.com/SourceControl/changeset/view/1acb241299a8#src/System.Web.Mvc/AuthorizeAttribute.cs

// In the worst case this could allow an authorized user
// to cause the page to be cached, then an unauthorized user would later be served the
// cached page.

カスタム ロジックを に配置しAuthorizationCoreます。

于 2013-02-21T15:12:24.147 に答える
-1

これがまったく役立つかどうかはわかりませんが、私はこれと同じことに遭遇し、少なくとも私の目的では、AuthorizeCoreをオーバーライドする必要はまったくないと判断しました。正直なところ、なぜそこにあるのかわかりません。MSDNが言うように、OnAuthorizationは「プロセスが承認を要求したときに」呼び出されます。これは、AuthorizeWithRoles属性を持つすべてのメソッドに対して呼び出されることを意味します。カスタムコードをOnAuthorization内に配置して、ユーザーに権限があるかどうかを確認できます。また、filterContextからhttpContextを取得できるため、AuthorizeCoreは実際には必要ありません。これが私のために働く簡単な例です:

public class LoginRequired : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (Common.ValidateCurrentSession(filterContext.HttpContext))
        {
            //this is valid; keep going
            return;
        }
        else
        {
            //this is not valid; redirect
            filterContext.Result = new RedirectResult("/login");
        }
    }
}

それがお役に立てば幸いです。それに加えて、明らかにOnAuthorizationがオーバーライドであることを宣言する必要があります。

編集:基本のOnAuthorizationメソッドは、AuthorizeCoreを呼び出すものだと思います。OnAuthorizationをオーバーライドしているので、明らかにその呼び出しは失われます。AuthorizeCoreのオーバーライドは、OnAuthorizationをそのままにしておくか、オーバーライドされたメソッド内でbase.OnAuthorization(filterContext)を呼び出した場合にのみ関係すると思います。

于 2012-11-20T20:17:22.493 に答える