У меня есть два атрибута: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
.