customErrors
ASP.NET MVC 应用程序中 web.config 文件的和httpErrors
部分有什么区别?
每个部分的使用指南是什么?
customErrors
ASP.NET MVC 应用程序中 web.config 文件的和httpErrors
部分有什么区别?
每个部分的使用指南是什么?
*2016 年 4 月更新
当 .net 代码抛出异常(404、403、500 等)时使用 customErrors 属性,而当 IIS 本身抛出异常时使用 httpErrors 属性。
试图正确配置它有很多陷阱。因此,如果您正在寻找一个简单的示例,那么您拥有的最佳 2 个选项是:
示例 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 错误处理自定义页面。一个朋友创建了这样的设置,我有时间会分享代码。
背景
一个好的自定义错误页面将:
因此,为了澄清我们配置中的一些选项:
<customErrors mode="RemoteOnly"
. 您可以在此处指定:On
, Off
, RemoteOnly
.
On
= 始终显示自定义错误页面Off
= 始终显示真正的错误RemoteOnly
= 在本地显示错误,但远程显示自定义错误页面。所以我们想要RemoteOnly
声明 1<customErrors redirectMode="ResponseRewrite"
. 您可以在此处指定:ResponseRedirect
或ResponseRewrite
。该ResponseRedirect
模式会将错误页面重定向到自定义错误页面。对于链接爬虫 (SEO),这将导致 302 -> 500,但您希望链接爬虫得到 500 错误。
<httpErrors errorMode="DetailedLocalOnly"
. 这相当于customErrors
模式。您拥有的选项:Custom
, Detailed
, DetailedLocalOnly
.
一篇对我有很大帮助的好博文是:http ://benfoster.io/blog/aspnet-mvc-custom-error-pages
免责声明:这是根据我的经验,未经证实的事实。
两者都用于定义网站的错误处理,但不同的软件引用不同的配置元素。
customErrors
是旧版(向后兼容)元素,由 Visual Studio 开发服务器(又名 VSDS 或 Cassini)使用。
httpErrors
是仅由 IIS7 使用的新元素。
这突出了在使用 VSDS 而不是本地 IIS 开发 ASP.NET 网站时可能出现的问题。
另外,如果您希望完全控制错误输出,请自行参考这篇文章,了解如何使用 IIS7 处理错误消息。
VSDS
使用customErrors
IIS6
供使用customErrors
IIS7
供使用httpErrors
。如果你开发VSDS
但发布到IIS7
,那么我想你会需要两者。
<customErrors>
相对<httpErrors>
<customErrors>
<httpErrors>
注意:不再需要使用
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 config 中的错误部分用于提供自定义 http 错误处理方法,有两个部分,一个是 system.web 部分中的 customErrors,另一个是 system.webServer 部分中的 httpErrors(如下所示)
customErrors : 此部分在 IIS 7、IIS 6 5 和完全使用此部分之前用于根据 http 状态代码处理自定义 http 错误。
httpErrors :如果请求的页面扩展名注册到 ISAPI dll(.aspx、ashx、.asmx、.svc 等),如 index.aspx,则 IIS 7 及更高版本使用此部分以及customErrors部分来处理基于文件扩展名的自定义 http 错误IIS 从customeErrors部分获取设置,否则它从httpErrors获取设置(IIS 7 托管模式必须设置为集成心情而不是经典)
以下是 404 错误处理检查链接的示例: