2016-06-26 2 views
0

У меня есть глобальный фильтр для авторизации запросов, для которых требуется файл cookie, но у меня есть контроллер, который должен быть общедоступным, поэтому я добавляю атрибут [AllowAnonymous] к методам контроллера, но мой фильтр все еще срабатывает и перенаправляет , Я не уверен, что это лучший способ решить эту проблему.Использование AttributeAuthorization для глобального фильтра

Нужно ли мне изменить мой метод onauthorization для поиска атрибута [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-selectively – Shyju

ответ

2

Мне нужно изменить мой метод onauthorization искать [AllowAnonymous] приписывать ли?

Вы могли бы, но было бы проще просто переместить логику поэтому метод базового OnAuthorize (который содержит logic to scan for [AllowAnonymous]) не изменялось.

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"); 
    } 
} 

Лучше использовать AuthorizeCore вернуть истину, если пользователь авторизован, и использовать HandleUnauthorizedRequest для редиректа.

OnAuthorization также содержит некоторые additional logic to help it deal with output caching, которые вы должны оставить на месте.

+0

Большое спасибо за это. Работает отлично. – Ralph

Смежные вопросы