187

customErrorsASP.NET MVC 应用程序中 web.config 文件的和httpErrors部分有什么区别?

每个部分的使用指南是什么?

4

4 回答 4

154

*2016 年 4 月更新

当 .net 代码抛出异常(404、403、500 等)时使用 customErrors 属性,而当 IIS 本身抛出异常时使用 httpErrors 属性。

  • /myfakeextensionslessurl --> httpErrors 404
  • /myfakeaspsx.aspx --> customErrors 404
  • /myfakeimage.jpg --> httpErrors 404
  • /throw500.apx --> customErrors 500
  • /throw500 --> customErrors 500

试图正确配置它有很多陷阱。因此,如果您正在寻找一个简单的示例,那么您拥有的最佳 2 个选项是:

示例 1:使用 html 页面

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.html" />
    <error statusCode="404" redirect="/Error404.html" />
    <error statusCode="500" redirect="/Error500.html" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="File" path="Error403.html" />
    <error statusCode="404" responseMode="File" path="Error404.html" />
    <error statusCode="500" responseMode="File" path="Error500.html" />
  </httpErrors>
</system.webServer>

示例 2:使用 aspx 页面

<system.web>
  <customErrors mode="RemoteOnly" defaultRedirect="/Error500.html" redirectMode="ResponseRewrite">
    <error statusCode="403" redirect="/Error403.aspx" />
    <error statusCode="404" redirect="/Error404.aspx" />
    <error statusCode="500" redirect="/Error500.aspx" />
  </customErrors>
</system.web>
<system.webServer>
  <httpErrors errorMode="DetailedLocalOnly" existingResponse="Auto">
    <remove statusCode="403" />
    <remove statusCode="404" />
    <remove statusCode="500" />
    <error statusCode="403" responseMode="ExecuteURL" path="Error403.aspx" />
    <error statusCode="404" responseMode="ExecuteURL" path="Error404.aspx" />
    <error statusCode="500" responseMode="ExecuteURL" path="Error500.aspx" />
  </httpErrors>
</system.webServer>

在 aspx 错误页面中,您需要执行以下操作(例如 404 页面):

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>

注意:不能在 customErrors 部分中使用无扩展名的 url . (没有黑客)

一种解决方法是禁用自定义错误并让 http 错误处理自定义页面。一个朋友创建了这样的设置,我有时间会分享代码。

背景

一个好的自定义错误页面将:

  1. 本地访问问题页面时显示真正的异常
  2. 远程访问问题页面时显示自定义页面
  3. 不会重定向,只是简单的显示错误页面内容(因为seo的原因)
  4. 将显示正确的状态码

因此,为了澄清我们配置中的一些选项:

  1. <customErrors mode="RemoteOnly". 您可以在此处指定:On, Off, RemoteOnly.

    • On= 始终显示自定义错误页面
    • Off= 始终显示真正的错误
    • RemoteOnly= 在本地显示错误,但远程显示自定义错误页面。所以我们想要RemoteOnly声明 1
  2. <customErrors redirectMode="ResponseRewrite". 您可以在此处指定:ResponseRedirectResponseRewrite。该ResponseRedirect模式会将错误页面重定向到自定义错误页面。对于链接爬虫 (SEO),这将导致 302 -> 500,但您希望链接爬虫得到 500 错误。

  3. <httpErrors errorMode="DetailedLocalOnly". 这相当于customErrors模式。您拥有的选项:Custom, Detailed, DetailedLocalOnly.

一篇对我有很大帮助的好博文是:http ://benfoster.io/blog/aspnet-mvc-custom-error-pages

于 2013-08-23T13:28:57.800 回答
88

免责声明:这是根据我的经验,未经证实的事实。

两者都用于定义网站的错误处理,但不同的软件引用不同的配置元素。

customErrors是旧版(向后兼容)元素,由 Visual Studio 开发服务器(又名 VSDS 或 Cassini)使用。

httpErrors是仅由 IIS7 使用的新元素。

这突出了在使用 VSDS 而不是本地 IIS 开发 ASP.NET 网站时可能出现的问题。

另外,如果您希望完全控制错误输出,请自行参考这篇文章,了解如何使用 IIS7 处理错误消息。

概括:

  • 开发中VSDS使用customErrors
  • 发布网站以IIS6供使用customErrors
  • 发布站点以IIS7供使用httpErrors

如果你开发VSDS但发布到IIS7,那么我想你会需要两者。

于 2010-03-19T23:08:54.633 回答
39

<customErrors>相对<httpErrors>


<customErrors>

  • 在 IIS7+ 中仍然可用
  • 为 ASP.NET 处理的请求指定自定义错误页面
  • 只处理 ASP.NET 应用程序中的请求
  • 不处理静态文件,例如 HTML 文件或目录(“友好”)URL

<httpErrors>

  • 在 IIS7 中引入
  • 为 IIS 处理的请求指定自定义错误页面
  • 处理 ASP.NET 应用程序内的请求和/或处理 ASP.NET 应用程序外的请求 *
  • 处理所有文件和 URL *

注意:不再需要使用customErrors

引用来源:ASP.NET 中的自定义 404 和错误页面(优秀文章)


ExecuteURL提供动态内容,例如 .aspx 页面(path值必须是服务器相对 URL):

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="ExecuteURL" >
    <remove statusCode="404"/>
    <error statusCode="404" responseMode="ExecuteURL" path="/error.aspx" />
  </httpErrors>
</system.webServer>

File提供自定义错误文件,例如 .html 页面:

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
    <remove statusCode="404"/>
    <error statusCode="404" path="404.html" />
  </httpErrors>
</system.webServer>

参考:HTTP 错误(www.iis.net)

有关更多详细信息,请阅读上面的 www.iis.net 链接

于 2014-08-01T21:21:53.093 回答
4

Web config 中的错误部分用于提供自定义 http 错误处理方法,有两个部分,一个是 system.web 部分中的 customErrors,另一个是 system.webServer 部分中的 httpErrors(如下所示)

customErrors : 此部分在 IIS 7、IIS 6 5 和完全使用此部分之前用于根据 http 状态代码处理自定义 http 错误。

httpErrors :如果请求的页面扩展名注册到 ISAPI dll(.aspx、ashx、.asmx、.svc 等),如 index.aspx,则 IIS 7 及更高版本使用此部分以及customErrors部分来处理基于文件扩展名的自定义 http 错误IIS 从customeErrors部分获取设置,否则它从httpErrors获取设置(IIS 7 托管模式必须设置为集成心情而不是经典)

以下是 404 错误处理检查链接的示例:

webconfig、iis、asp.net 中的 httperrors 与 customerrors

于 2013-08-16T11:51:50.940 回答