【问题标题】:Cannot show custom error page on HTTP 403 in MVC app无法在 MVC 应用程序中的 HTTP 403 上显示自定义错误页面
【发布时间】:2015-02-03 14:57:38
【问题描述】:

我的 MVC 应用程序的 Global.asax.cs 文件中有以下代码,它捕获 500 和 404 错误并调用我的 ErrorsController,它根据代码返回我的自定义错误页面。这工作正常。但是这段代码也应该捕获 403 错误(未经授权),以便我的控制器也显示正确的视图。但是当我运行它时,我得到一个 IIS 页面,上面写着未经授权的消息。如何获取此代码来调用我的 ErrorsController、接收 403 代码并显示我的自定义视图?

我测试它的方式是在我的一个操作上放置一个 [Authorize] 属性并调用该操作。我应该得到 403 错误,并且应该显示我的自定义错误页面。

protected void Application_Error(object sender, EventArgs e)
    {
        Exception exception = Server.GetLastError();
        Server.ClearError();

        RouteData routeData = new RouteData();
        routeData.Values.Add("controller", "Errors");
        routeData.Values.Add("action", "Feedback");
        routeData.Values.Add("exception", exception);

        if (exception.GetType() == typeof(HttpException))
        {
            routeData.Values.Add("statusCode", ((HttpException)exception).GetHttpCode());
        }
        else
        {
            routeData.Values.Add("statusCode", 500);
        }

        IController controller = new ErrorsController();
        controller.Execute(new RequestContext(new HttpContextWrapper(Context), routeData));
        Response.End();
    }

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

使用Authorize属性时,授权失败不会触发应用程序错误,只会返回HttpResponseMessage。这就是为什么它没有按您预期的那样工作(而且它不应该按您的预期工作)。

这些带有自定义错误页面的东西在 .Net MVC 中有点混乱,但我建议您查看 HttpErrors 或创建自己的自定义 HttpModule 来检查传出响应的状态并在那里采取适当的措施.

【讨论】:

  • (但我碰巧知道有一个针对此问题的简洁开源解决方案的倡议,该解决方案即将公开发布,我会在不久的将来对此保持警惕)
猜你喜欢
  • 2016-08-06
  • 2013-08-04
  • 2013-07-13
  • 1970-01-01
  • 1970-01-01
  • 2013-05-12
  • 2018-12-20
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多