如何在 ASP.NET MVC 中显示自定义错误页面并返回错误代码
您可以使用 web.config 中的 <customErrors>
在 MVC 应用程序中发生异常时显示自定义页面,并返回状态码 200。
出于 SEO 原因,您可能希望在 ASP.NET Webform 或 MVC 应用程序中显示自定义错误页面并返回适当的错误代码。
<customErrors>
部分仅用于处理 ASP.NET 应用程序级别的异常。用户和应用程序之间有一个 IIS Web 服务器。
web.config 中 <system.webServer>
下的 httpErrors 元素用于配置 IIS 级别的错误 (IIS 7+)。它会覆盖 <customErrors>
部分的配置。
要显示带适当错误代码的自定义错误页面,请仅使用 <httpErrors>
部分,不要使用 <customErrors>
部分。
在 <system.webServer>
部分下添加以下 <httpErrors>
部分,如下所示。
<httpErrors errorMode="Custom" existingResponse="Replace" >
<remove statusCode="500"/>
<error statusCode="500" path="500.html" responseMode="File"/>
<remove statusCode="404"/>
<error statusCode="404" path="404.html" responseMode="File"/>
<remove statusCode="400"/>
<error statusCode="400" path="400.html" responseMode="File"/>
</httpErrors>
上述 <httpErrors>
将替换来自 ASP.NET 的响应,匹配状态码并返回自定义 HTML 文件作为响应。这将保留 URL 并返回带适当错误代码的自定义错误页面。
为了使上述配置生效,请在应用程序根目录创建 500.html、404.html、400.html。以下是 404.html 文件。
<!DOCTYPE html>
<html>
<body>
<h1>Page not found.</h1>
</body>
</html>
现在,导航到应用程序中不存在的页面,您将看到以下响应。

让我们了解上述 <httpErrors>
设置。
errorMode
属性可以有三个值:DetailedLocalOnly、Detailed 和 Custom。我们想在 localhost 上测试它,所以使用了 Custom
模式。通常,您应该使用 DetailedLocalOnly
,它会在 localhost 上显示错误信息,但远程显示自定义错误页面。
existingResponse
属性可以有三个值:Auto、Replace 和 PassThrough。由于我们要返回带错误代码的自定义错误页面,因此必须替换来自 ASP.NET 应用程序的错误响应。因此,使用 existingResponse="Replace"
。
<remove statusCode="500" />
从您的站点或应用程序从 IIS 配置层次结构中的更高级别继承的错误消息集合中删除特定的错误消息。
<error statusCode="500" path="500.html" responseMode="File" />
配置 500 错误代码。path 属性定义要返回的自定义错误页面的路径。responseMode
属性指定 IIS 是在响应错误时提供静态内容、动态内容还是重定向到单独的 URL。
上述 <httpErrors>
元素配置了三个状态码:500、404 和 400。它将分别为状态码 500、404 和 400 返回自定义页面 500.html、404.html 和 400.html。
请注意,您必须在应用程序的根文件夹中创建这些 HTML 文件。
通过这种方式,您可以在 ASP.NET Webform 或 MVC 应用程序中向用户返回带适当状态码的自定义错误页面。
在此处了解有关 httpErrors 的更多信息:此处。