0

在我的 MVC4 互联网应用程序中,我使用默认附带的 AccountController 以及角色等。

所以我有这个控制器,我在其中定义了访问操作的角色,示例如下。

public class SomeController : Controller
{
    private SomeDbContext db = new LookbookDbContext();

    //
    // GET: /Default1/
    [Authorize(Roles = "Administrator")]
    public ActionResult Index()
    {
        return View(db.SomeTable.ToList());
    }

...
}

我现在想要的是,当用户/匿名用户尝试访问此索引操作时,获取我制作的自定义错误视图,而不是显示登录表单。

我已经添加了这个,但它什么也没做。我不断收到登录表单页面。我更改了它,以测试 porpuses,给我默认的 401 错误页面,但它也不起作用。

public class CustomAuthorize : AuthorizeAttribute
{
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            filterContext.Result = new HttpUnauthorizedResult();
        }
}
4

3 回答 3

0

显然,您需要做的第一件事是制作自定义视图。

现在,我建议制作一个动作过滤器来处理这个问题:

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class AuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(System.Web.Mvc.AuthorizationContext filterContext)
    {
        if (filterContext.HttpContext.Request.IsAuthenticated)
        {
            filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden);
        }
        else
        {
            filterContext.RequestContext.HttpContext.Response.Redirect("~/shared/error");
        }
    }
}
于 2013-09-26T16:08:48.240 回答
0

您应该能够从您的属性重定向到您的自定义错误视图。

例子

public class UnAuthorizedRedirectAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.Redirect("~/error/no-bacon");
    }
}
于 2013-09-26T16:59:05.730 回答
0

注意:此答案已添加到问题中。我将其移至此处以符合站点指南。


我缺少的是我的操作上的 [CustomAuthorize] 属性。一旦我将它添加到所需的操作中,它就起作用了。

于 2019-07-11T21:26:11.607 回答