1

У меня есть два атрибута:Global Пользовательские Авторизоваться атрибуты с Исключенными Atrribute

public class AnonymousAllowedAttribute : AuthorizeAttribute { } 

public class ActionAuthorizeAttribute : AuthorizeAttribute { 

    public override void OnAuthorization(AuthorizationContext filterContext) { 

    bool skipAuthorization = 
     filterContext.ActionDescriptor.IsDefined(typeof(AnonymousAllowedAttribute), true) 
     || 
     filterContext.ActionDescriptor.ControllerDescriptor.IsDefined(typeof(AnonymousAllowedAttribute), true); 
     if(!skipAuthorization) 
      base.OnAuthorization(filterContext); 
    } 


    bool CustomeCheck() { 
    bool result = //My Checks 
    return result; 
    } 
} 

Я определяю ActionAuthorizeAttribute в качестве глобального атрибута.

Так что мне нужно это 3 пунктов:

1- Если не войти (!User.Identity.IsAuthenticated): Перейти к Логин страницу Accounts/LogIn. Я должен упомянуть действие LogIn, обозначенное знаком AnonymousAllowedAttribute.

2- Если вход (User.Identity.IsAuthenticated) и действие или контроллер имеют AnonymousAllowedAttribute, тогда авторизируйтесь (не требуется авторизация).

3- Если журнал в (User.Identity.IsAuthenticated) и действия не AnonymousAllowedAttribute возвращение CustomeCheck() метод

Стараюсь второй по переопределение OnAuthorization() способом, как вы видите.

и третий один на следующие:

protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext){ 
    if(!httpContext.User.Identity.IsAuthenticated) 
     return false; 

    return CustomeCheck(); 
} 

, но когда я не войти всегда возвращаются:

IIS 7.5 Сведения об ошибке:

Ошибка HTTP 401,0 - Несанкционированное

с этот URL: http://myProject/Accounts/LogIn?ReturnUrl=%2f

где есть проблема? как можно реализовать ActionAuthorizeAttribute для достижения этих 3 целей?

Update

Я нахожу ответ: проблема заключается в: AnonymousAllowedAttribute нужно наследовать от Attribute, а не AuthorizeAttribute.

ответ

1

проблема: AnonymousAllowedAttribute необходимо унаследовать от Attribute, а не AuthorizeAttribute.

, когда AnonymousAllowedAttribute унаследовано от AuthorizeAttribute, поэтому необходимо авторизовать, но я создаю это, чтобы уменьшить авторизацию !!