将 [Authorize(Roles="admin")] 放在视图上,它在用户被重定向时工作,但是,尽管他们已经登录,但它们总是被重定向到登录视图。我该如何更改它转到错误页面或类似的东西?
问问题
1288 次
2 回答
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")]
希望这可以帮助
于 2013-10-24T12:20:15.483 回答
0
而不是提供的副本,我使用了问题中的代码:防止 FormsAuthenticationModule 拦截 ASP.NET Web API 响应并进行相应修改:
[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]。现在,未经授权的人将按预期重定向到登录,而未担任角色的人将被重定向到自定义视图。
于 2013-10-24T12:20:34.933 回答