两者有什么区别 customErrorshttpErrors ASP.NET MVC 应用程序中 web.config 文件的各个部分?

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

有帮助吗?

解决方案

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

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

customErrors 是遗留(向后兼容)元素,由 Visual Studio 开发服务器(又名。VSDS 或卡西尼号)。

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

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

还, 自己参考这个帖子 如果您希望完全控制错误输出,请了解如何使用 IIS7 处理错误消息。

概括:

  • 发展于 VSDS - 使用 customErrors
  • 将网站发布到 IIS6 - 使用 customErrors
  • 将网站发布到 IIS7 - 使用 httpErrors.

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

其他提示

*更新于 2016 年 4 月

当 .net 代码引发异常(404、403、500 等)时,将使用 customErrors 属性;当 IIS 本身引发异常时,将使用 httpErrors 属性。

  • /myfakeextensionslessurl --> httpErrors 404
  • /myfakeaspsx.aspx --> 自定义错误 404
  • /myfakeimage.jpg --> httpErrors 404
  • /throw500.apx --> 自定义错误 500
  • / throw500 --> 自定义错误 500

尝试正确配置它会遇到很多陷阱。因此,如果您正在寻找一个简单的示例,那么最好的两个选择是:

示例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". 。您可以在此处指定: ResponseRedirect 或者 ResponseRewrite. 。这 ResponseRedirect 模式会将错误页面重定向到自定义错误页面。对于链接爬虫 (SEO),这将导致 302 -> 500,但您希望链接爬虫获得 500 错误。

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

一篇对我帮助很大的好博客文章是: 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 链接

在web配置错误部分是用于提供自定义的HTTP错误处理的方法有两个部分,所述部分的System.Web内部的一个的customErrors和区段system.webServer内的另一个httpErrors(如下面给出的)

<强>的customErrors: 这部分是IIS 7之前使用所引入的,IIS 6 5和之前充分利用此部分用于根据HTTP状态代码处理自定义HTTP错误。

<强> httpErrors: IIS 7和更高版本使用本节还有的customErrors 部分来处理基于他们的文件扩展名的自定义HTTP错误,如果请求的页面扩展与ISAPI DLL注册(的.aspx,ASHX,的.asmx,.SVC等)像的Index.aspx然后IIS拾取来自的 customeErrors 部分否则它拾取来自设定的 httpErrors (IIS 7托管模式必须被设置成集成心情不经典)

下面是为404的错误处理校验链路的示例:

httperrors VS在webconfig的customErrors,IIS, asp.net

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top