【发布时间】:2015-07-24 09:10:10
【问题描述】:
我正在使用下面的中间件为 HTTP 状态代码 400 到 599 设置错误页面。因此访问/error/400 会显示 400 Bad Request 错误页面。
application.UseStatusCodePagesWithReExecute("/error/{0}");
[Route("[controller]")]
public class ErrorController : Controller
{
[HttpGet("{statusCode}")]
public IActionResult Error(int statusCode)
{
this.Response.StatusCode = statusCode;
return this.View(statusCode);
}
}
但是,访问 /this-page-does-not-exist 会导致一个通用的 IIS 404 Not Found 错误页面。
有没有办法处理不匹配任何路由的请求?在 IIS 接管之前如何处理此类请求?理想情况下,我想将请求转发给/error/404,以便我的错误控制器可以处理它。
在 ASP.NET 4.6 MVC 5 中,我们必须使用 Web.config 文件中的 httpErrors 部分来执行此操作。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<error statusCode="404" responseMode="ExecuteURL" path="/error/404/" />
</httpErrors>
</system.webServer>
</configuration>
【问题讨论】:
-
您可以使用 global.asax 和
protected void Application_Error(object sender, EventArgs e)捕获所有错误,然后从那里重定向。您需要检查它是否是 IsAjaxRequest,否则您可以根据异常重定向 -
这是 ASP.NET 5 Beta 7 MVC 6。没有 Global.asax。
-
真的吗?你确定吗?当您没有必须时,这是否像您“不得不使用”httpErrors?默认没有global.asax,加一个就行了——stackoverflow.com/questions/24718640/…
-
我正在寻找一种内置的 ASP.NET 5 方法来执行此操作(如果有的话)。 ASP.NET 5 仍然需要一个 web.config 文件(以启用 GZip 压缩等),所以我宁愿使用它而不是 Global.asax。
-
找到了这个相关的问题,但不确定它是否真的回答了这个问题stackoverflow.com/questions/29421164/mvc-6-404-not-found
标签: c# asp.net iis asp.net-core asp.net-core-mvc