Answers:
免责声明:这是根据我的经验,不是事实。
两者都用于定义网站的错误处理,但是不同的软件引用不同的配置元素。
customErrors
是Visual Studio Development Server(又称VSDS或Cassini)使用的旧版(向后兼容)元素。
httpErrors
是仅由IIS7使用的新元素。
这突出了可能在使用VSDS而不是本地IIS的同时开发ASP.NET网站时问题。
另外,请自己参考这篇文章如果您希望完全控制错误输出了解如何使用IIS7处理错误消息。
VSDS
使用中customErrors
IIS6
供使用customErrors
IIS7
供使用httpErrors
。如果您使用开发VSDS
但发布到IIS7
,那么我想您会同时需要两者。
* 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>
与 <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链接
it's no loger necesary to use customErrors
,这确实是我所追求的信息:-)
Web配置中的错误部分用于提供自定义http错误处理方法,有两个部分,一个在system.web部分内部,一个customErrors,另一个在system.webServer部分内部,httpError,如下所示。
customErrors: 在引入IIS 7之前,IIS 6 5之前以及在根据HTTP状态代码完全使用此部分来处理自定义HTTP错误之前,都在使用此部分。
httpErrors: IIS 7和更高版本使用IIS 7和更高版本,并使用customErrors部分根据文件扩展名处理自定义http错误(如果请求的页面扩展名注册有ISAPI dll(.aspx,ashx,.asmx,.svc等),则为index.aspx) IIS从customeErrors部分中选取设置,否则从httpErrors中选取设置(IIS 7托管模式必须设置为集成心情,而不是经典风格)
以下是针对404错误处理检查链接的示例: