CustomError 和 httpError 之间的区别是什么?

在 ASP.NET MVC 应用程序中,web.config 文件的 customErrorshttpErrors部分有什么不同?

使用每个部分的指导方针是什么?

83129 次浏览

免责声明: 这是从我的经验,并没有证明的事实。

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

customErrors是由 VisualStudioDevelopmentServer (又名.VSDS 或 Cassini)使用的遗留(向后兼容)元素。

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

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

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

摘要:

  • VSDS中开发-使用 customErrors
  • 将站点发布到 IIS6-使用 customErrors
  • 将站点发布到 IIS7-使用 httpErrors

如果你开发与 VSDS但发表到 IIS7,那么我想你将需要两者。

Web 配置中的错误部分用于提供定制的 http 错误处理方法有两个部分,一个是 system.web 部分中的 customError,另一个是 system.webServer 部分中的 httpError (如下所示)

错误: 本节在 IIS7、 IIS65和充分使用本节以根据 HTTP状态码处理自定义 http 错误之前就已经在使用了。

错误: IIS7和更高版本使用本节以及 错误节来处理自定义 http 错误,这些错误是基于它们的文件扩展名(如果使用 ISAPI dll (请求页面扩展名注册))。Aspx,ashx,.美国体育协会。例如 index.aspx,然后 IIS 从 客户错误部分获取设置,或者从 错误部分获取设置(IIS7宿主模式必须设置为集成情绪,而不是经典)

下面是404错误处理检查链接的例子:

Webconfig,iis,asp.net 中的 httperrorvs customerror

* 2016年4月更新

属性时使用 customError 属性。Net 代码引发异常(404、403、500等) ,当 IIS 本身引发异常时,使用 httpError 属性。

  • /myfaketensionslessurl —— > httpError 404
  • /myfakeaspsx.aspx —— > customErrors404
  • /myfakeimage. jpg —— > httpErrors404
  • /throw500.apx —— > customErrors500
  • /throw500-> customErrors500

试图正确地配置它有很多缺陷。因此,如果你正在寻找一个快速的例子,最好的两个选择是:

示例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;
%>

注意: customErrorssection 中使用的扩展名 less url 是 不可能!. (没有 hacks)

解决办法之一是禁用自定义错误,并让 http 错误处理自定义页面。一个朋友已经创建了这样的设置,当我找到一些时间,我会共享代码。

背景资料

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

  1. 在本地访问问题页面时显示真正的异常
  2. 远程访问问题页时显示自定义页
  3. 不会重定向,只是显示错误页面内容(由于搜索引擎优化的原因)
  4. 将显示正确的状态代码

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

  1. 你可以在这里指定: OnOffRemoteOnly

    • 始终显示自定义错误页面
    • 始终显示真正的错误
    • 在本地显示错误,但远程显示自定义错误页面。 所以我们需要 RemoteOnly作为语句1
  2. <customErrors redirectMode="ResponseRewrite".您可以在这里指定: ResponseRedirectResponseRewriteResponseRedirect模式将错误页面重定向到自定义错误页面。对于一个链接爬虫(SEO) ,这将导致302-> 500,但是你希望链接爬虫得到一个500错误。

  3. 这相当于 customErrors模式。你可以选择: CustomDetailedDetailedLocalOnly

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

<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 链接