显示自定义错误页面而不是登录页面

时间:2013-09-26 15:46:31

标签: asp.net-mvc asp.net-mvc-4

(给我的第一步ASP.NET和MVC以及我的裸露)

在我的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();
        }
}

任何帮助都会非常感激。

修改 好的,我缺少的是我的Actions上的[CustomAuthorize]属性。一旦我将其添加到所需的操作中就可以了。

谢谢!

3 个答案:

答案 0 :(得分: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");
        }
    }
}

答案 1 :(得分:0)

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

示例

public class UnAuthorizedRedirectAttribute : AuthorizeAttribute
{
    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.RequestContext.HttpContext.Response.Redirect("~/error/no-bacon");
    }
}

答案 2 :(得分:0)

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


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