customErrors和httpErrors有什么区别?

Ala*_*n T 162 web-config iis-7.5

是什么之间的区别customErrors,并httpErrors在ASP.NET MVC应用程序的web.config文件的部分?

使用每个部分的准则是什么?

Maa*_*eft 129

*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>
Run Code Online (Sandbox Code Playgroud)

示例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>
Run Code Online (Sandbox Code Playgroud)

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

<% 
    Response.StatusCode = 404;
    Response.TrySkipIisCustomErrors = true;
 %>
Run Code Online (Sandbox Code Playgroud)

注意:无法在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


Pur*_*ome 82

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

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

customErrors 是Visual Studio开发服务器(又名VSDS或Cassini)使用的遗留(可向后兼容)元素.

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

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

另外,如果您希望完全控制错误输出,请参阅本文,了解如何使用IIS7处理错误消息.

摘要:

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

如果你发展,VSDS但发布到IIS7,那么我想你将需要两者.

  • customErrors适用于asp.net.httpErrors用于IIS7,因此处理不通过.net处理程序的内容(例如.png,.js等)如果您想要非网内容类型的错误页面,请使用IIS错误页面(IIS7的httpErrors) ,IIS6的UI.) (29认同)
  • 我建议在Visual Studio中安装和使用IIS 7 Express进行调试.与Cassini不同,它将使用与常规IIS 7相同的配置选项. (4认同)

Joh*_*hnB 35

<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>
Run Code Online (Sandbox Code Playgroud)

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

<system.webServer>
  <httpErrors errorMode="Custom" existingResponse="Auto" defaultResponseMode="File" >
    <remove statusCode="404"/>
    <error statusCode="404" path="404.html" />
  </httpErrors>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

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

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

  • +1的注意事项`它不需要使用customErrors`和引用,这真的是我追求的信息:-) (3认同)