在 ASP.NET MVC 应用程序中,web.config 文件的 customErrors和 httpErrors部分有什么不同?
customErrors
httpErrors
使用每个部分的指导方针是什么?
免责声明: 这是从我的经验,并没有证明的事实。
两者都用于为网站定义错误处理,但是不同的软件引用不同的配置元素。
customErrors是由 VisualStudioDevelopmentServer (又名.VSDS 或 Cassini)使用的遗留(向后兼容)元素。
httpErrors是仅由 IIS7使用的新元素。
这突出了在使用 VSDS 而不是本地 IIS 开发 ASP.NET 网站时的 有可能问题。
另外,如果您希望完全控制错误输出,还可以使用 我自己参考这篇文章了解如何使用 IIS7处理错误消息。
VSDS
IIS6
IIS7
如果你开发与 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错误处理检查链接的例子:
* 2016年4月更新
属性时使用 customError 属性。Net 代码引发异常(404、403、500等) ,当 IIS 本身引发异常时,使用 httpError 属性。
试图正确地配置它有很多缺陷。因此,如果你正在寻找一个快速的例子,最好的两个选择是:
示例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 错误处理自定义页面。一个朋友已经创建了这样的设置,当我找到一些时间,我会共享代码。
背景资料
一个好的自定义错误页面将:
因此,为了澄清我们的配置中的一些选项:
你可以在这里指定: On,Off,RemoteOnly。
On
Off
RemoteOnly
<customErrors redirectMode="ResponseRewrite".您可以在这里指定: ResponseRedirect或 ResponseRewrite。ResponseRedirect模式将错误页面重定向到自定义错误页面。对于一个链接爬虫(SEO) ,这将导致302-> 500,但是你希望链接爬虫得到一个500错误。
<customErrors redirectMode="ResponseRewrite"
ResponseRedirect
ResponseRewrite
这相当于 customErrors模式。你可以选择: Custom,Detailed,DetailedLocalOnly。
Custom
Detailed
DetailedLocalOnly
一篇对我帮助很大的博客文章是: http://benfoster.io/blog/aspnet-mvc-custom-error-pages
<customErrors>对 <httpErrors>
<customErrors>
<httpErrors>
注意: 不再需要使用 customErrors
引自: ASP.NET 中的自定义404和错误页面(优秀文章)
ExecuteURL提供动态内容,比如.aspx 页面(path值必须是 服务器相对 URL) :
ExecuteURL
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 页面:
File
<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 链接