1

将 [Authorize(Roles="admin")] 放在视图上,它在用户被重定向时工作,但是,尽管他们已经登录,但它们总是被重定向到登录视图。我该如何更改它转到错误页面或类似的东西?

4

2 回答 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 回答