从方法 AuthorizeCore 获取 return
Get return from method AuthorizeCore
我正在尝试使用声明授权并且我正在使用此数据注释
[ClaimsAuthorize(ClaimTypes.Role, "Admin")]
public void Test()
{
....
}
当我尝试访问 test 方法时,我被重定向到 AuthorizeCore 方法:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var identity = (ClaimsIdentity)httpContext.User.Identity;
var claim = identity.Claims.FirstOrDefault(c => c.Type == ClaimType);
if(claim != null)
{
return claim.Value == ClaimValue;
}
return false;
}
当我的用户能够访问 test 方法时,这些方法工作正常,但当用户无法访问时,什么也没有发生。
我的问题是:当 return 为 false 时,如何获取方法 return?
谢谢
感谢@trailmax 我可以解决我的问题:
public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
public string ClaimType { get; set; }
public string ClaimValue { get; set; }
public ClaimsAuthorizeAttribute(string claimType, string claimValue)
{
ClaimType = claimType;
ClaimValue = claimValue;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
var user = (ClaimsIdentity)HttpContext.Current.User.Identity;
var claim = user.Claims.FirstOrDefault(c => c.Type == ClaimType);
if (claim != null && claim.Value == ClaimValue)
{
base.OnAuthorization(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(){
{"controller", "Contas"},
{"action", "NaoAutorizado"}
});
}
}
}
非常感谢
我正在尝试使用声明授权并且我正在使用此数据注释
[ClaimsAuthorize(ClaimTypes.Role, "Admin")]
public void Test()
{
....
}
当我尝试访问 test 方法时,我被重定向到 AuthorizeCore 方法:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
var identity = (ClaimsIdentity)httpContext.User.Identity;
var claim = identity.Claims.FirstOrDefault(c => c.Type == ClaimType);
if(claim != null)
{
return claim.Value == ClaimValue;
}
return false;
}
当我的用户能够访问 test 方法时,这些方法工作正常,但当用户无法访问时,什么也没有发生。
我的问题是:当 return 为 false 时,如何获取方法 return? 谢谢
感谢@trailmax 我可以解决我的问题:
public class ClaimsAuthorizeAttribute : AuthorizeAttribute
{
public string ClaimType { get; set; }
public string ClaimValue { get; set; }
public ClaimsAuthorizeAttribute(string claimType, string claimValue)
{
ClaimType = claimType;
ClaimValue = claimValue;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
var user = (ClaimsIdentity)HttpContext.Current.User.Identity;
var claim = user.Claims.FirstOrDefault(c => c.Type == ClaimType);
if (claim != null && claim.Value == ClaimValue)
{
base.OnAuthorization(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(){
{"controller", "Contas"},
{"action", "NaoAutorizado"}
});
}
}
}
非常感谢