将[Authorize(Roles =“admin”)]放在视图上,它在用户被重定向时起作用,但是,尽管它们已经登录,但它们总是被重定向到登录视图。 如何更改此内容以使其进入错误页面或类似内容?
答案 0 :(得分:1)
您可以像这样创建自定义授权属性
public class CustomAuthorize : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
base.HandleUnauthorizedRequest(filterContext);
}
else
{
filterContext.Result = new RedirectToRouteResult(new
RouteValueDictionary(new { controller = "Home", action = "UnAuthorized" }));
}
}
}
并像这样使用
[CustomAuthorize(Roles="admin")]
希望这有帮助
答案 1 :(得分:0)
我使用了问题中的代码Prevent FormsAuthenticationModule of intercepting ASP.NET Web API responses而不是提供的重复内容,并相应地进行了修改:
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeCustom : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new RedirectResult("/Error/Unauthorized");
}
else
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
}
base.HandleUnauthorizedRequest(filterContext);
}
}
}
然后只为“/ Error / Unauthorized”路径创建了一个视图,并将属性[Authorize]更改为[AuthorizeCustom]。现在,未经授权的人员将被重定向到按预期登录,并且不在角色中的人被重定向到自定义视图。