customErrors和httpErrors有什么区别?

时间:2010-03-19 19:18:30

标签: web-config iis-7.5

ASP.NET MVC应用程序中web.config文件的customErrorshttpErrors部分之间有什么区别?

使用每个部分有哪些指导原则?

4 个答案:

答案 0 :(得分:120)

* 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

尝试正确配置这一点有很多陷阱。因此,如果您正在寻找一个快速示例,您拥有的最佳选择是:

示例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部分使用扩展名较少的网址不可能!(没有黑客攻击)

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

<强>背景

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

  1. 在本地访问问题页面时显示真实例外
  2. 远程访问问题页面时显示自定义页面
  3. 不会重定向,只是显示错误页面内容(因为seo原因)
  4. 将显示正确的状态代码
  5. 所以要澄清我们配置中的一些选项:

    1. <customErrors mode="RemoteOnly"。您可以在此处指定:OnOffRemoteOnly

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

    3. ResponseRedirect。这相当于<httpErrors errorMode="DetailedLocalOnly"模式。您拥有的选项:customErrorsCustomDetailed

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

答案 1 :(得分:79)

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

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

customErrors是一个遗留的(可向后兼容的)元素,由Visual Studio Development Server(又名VSDS或Cassini)使用。

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

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

另外,refer to this post by myself关于如何使用IIS7处理错误消息,如果您希望完全控制错误输出。

要点:

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

如果您使用VSDS进行开发,但发布到IIS7,那么我猜您需要两者。

答案 2 :(得分:33)

<customErrors><httpErrors>


<customErrors>

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

<httpErrors>

  • 在IIS7中介绍
  • 为IIS处理的请求指定自定义错误页面
  • 处理ASP.NET应用程序中的请求 AND / OR 处理 - ASP.NET应用程序之外的请求*
  • 处理所有文件和网址*
  

注意:不再需要使用customErrors

引用来源:Custom 404 and error pages in ASP.NET(优秀文章)


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

<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 Errors (www.iis.net)

了解更多详情,请阅读上面的www.iis.net链接

答案 3 :(得分:4)

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 customerrors in webconfig , iis, asp.net