我有两个属性:
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
的{{1}}操作。
2-如果登录(AnonymousAllowedAttribute
)且操作或控制器有User.Identity.IsAuthenticated
,则授权为真(不需要任何授权)。
3-如果登录(AnonymousAllowedAttribute
)并且操作没有User.Identity.IsAuthenticated
返回AnonymousAllowedAttribute
方法
如您所见,我通过覆盖CustomeCheck()
方法尝试第二个。
和第三个如下:
OnAuthorization()
但是当我没有登录时总是返回:
IIS 7.5错误详细信息:
HTTP错误401.0 - 未经授权
使用此网址:protected override bool AuthorizeCore(System.Web.HttpContextBase httpContext){
if(!httpContext.User.Identity.IsAuthenticated)
return false;
return CustomeCheck();
}
http://myProject/Accounts/LogIn?ReturnUrl=%2f
来实现这3个目标?
更新
我找到答案:问题是:ActionAuthorizeAttribute
需要继承AnonymousAllowedAttribute
而不是Attribute
。
答案 0 :(得分:1)
问题是:AnonymousAllowedAttribute
需要继承Attribute
而不是AuthorizeAttribute
。
AnonymousAllowedAttribute
从AuthorizeAttribute
继承,所以需要授权,但我创建了以减少授权!!