2016-06-26 1 views
0

クッキーを必要とする要求を許可するグローバルフィルタを登録しましたが、コントローラのメソッドに[AllowAnonymous]属性を追加するためにパブリックにする必要があるコントローラがありますが、 。私はこの問題を解決する最善の方法は不明です。グローバルフィルタのためのAttributeAuthorizationの使用

[AllowAnonymous]属性を探すために私の認証方法を変更する必要がありますか?

public class CookieAuthFilter : AuthorizeAttribute 
     { 
      public override void OnAuthorization(AuthorizationContext filterContext) 
      { 
       HttpCookie cookie = filterContext.HttpContext.Request.Cookies.Get("token"); 
       if (cookie == null) 
       { 
        filterContext.Result = new RedirectResult("/Home/Index"); 
       } 

      } 
     } 
+0

これをご覧くださいhttp://stackoverflow.com/questions/9953760/how-to-disable-a-global-filter-in-asp-net-mvc-選択的に – Shyju

答えて

2

私は[のAllowAnonymous]属性を探すために私のonauthorization方法を変更する必要がありますか?

あなたはできたが、(logic to scan for [AllowAnonymous]が含まれている)ベースOnAuthorize方法が変更されていないので、ちょうどあなたのロジックを移動する方が簡単だろう。

public class CookieAuthFilter : AuthorizeAttribute 
{ 
    protected override bool AuthorizeCore(HttpContextBase httpContext) 
    { 
     return httpContext.Request.Cookies.Get("token") != null; 
    } 

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) 
    { 
     filterContext.Result = new RedirectResult("/Home/Index"); 
    } 
} 

ユーザが許可されている場合はtrueを返すためにAuthorizeCoreを使用して、リダイレクトのためHandleUnauthorizedRequestを使用することをお勧めします。

OnAuthorizationには、残しておいてくださいadditional logic to help it deal with output cachingも含まれています。

+0

ありがとうございます。完璧に動作します。 – Ralph

関連する問題