这里有一个奇怪的问题.每个人都知道,如果您使用web.config的customErrors
部分来创建自定义错误页面,那么您应该将其设置Response.StatusCode
为适当的.例如,如果我创建一个自定义404页面并将其命名为404.aspx,我可以放入<% Response.StatusCode = 404 %>
内容以使其具有真正的404状态标题.
到目前为止跟着我?好.现在尝试在IIS7上执行此操作.期间我无法上班.如果Response.StatusCode
在自定义错误页面中设置,IIS7似乎完全覆盖自定义错误页面,并显示其自己的状态页面(如果您已配置一个.)
有没有其他人看到这种行为,也许还知道如何解决它?它在IIS6下工作,所以我不知道为什么会发生变化.
注意:这与ASP.NET自定义404返回200 OK而不是404 Not Found中的问题不同
在system.webServer/httpErrors部分中将existingResponse设置为PassThrough:
existingResponse属性的默认值为Auto:
Auto告诉自定义错误模块做正确的事情.客户端看到的实际错误文本将受到影响,具体取决于
IHttpResponse::GetStatus
调用中返回的fTrySkipCustomErrors的值.当fTrySkipCustomErrors设置为true时,自定义错误模块将允许响应通过,但如果将其设置为false,则自定义错误模块将使用其自己的文本替换文本.
更多信息:IIS7自定义错误模块可以带来什么
使行为保持一致的最简单方法是清除错误并使用Response.TrySkipIisCustomErrors并将其设置为true.这将覆盖页面内的IIS全局错误页面处理或Application_Error中的全局错误处理程序.
Server.ClearError(); Response.TrySkipIisCustomErrors = true;
通常,您应该在Application_Error处理程序中执行此操作,该处理程序处理应用程序错误处理程序未捕获的所有错误.
更多详细信息可以在这篇博文中找到:http: //www.west-wind.com/weblog/posts/745738.aspx
解决:事实证明,"详细错误"需要打开才能使IIS7"通过"您可能拥有的任何错误页面.见http://forums.iis.net/t/1146653.aspx