当前位置:  开发笔记 > 后端 > 正文

IIS7在设置Response.StatusCode时覆盖customErrors?

如何解决《IIS7在设置Response.StatusCode时覆盖customErrors?》经验,为你挑选了3个好方法。

这里有一个奇怪的问题.每个人都知道,如果您使用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中的问题不同



1> Pavel Chuchu..:

在system.webServer/httpErrors部分中将existingResponse设置为PassThrough:

  
    
  

existingResponse属性的默认值为Auto:

Auto告诉自定义错误模块做正确的事情.客户端看到的实际错误文本将受到影响,具体取决于IHttpResponse::GetStatus调用中返回的fTrySkipCustomErrors的值.当fTrySkipCustomErrors设置为true时,自定义错误模块将允许响应通过,但如果将其设置为false,则自定义错误模块将使用其自己的文本替换文本.

更多信息:IIS7自定义错误模块可以带来什么


请注意,将existingResponse设置为PassThrough可能会导致一些副作用.在进行任何更改之前,请掌握Pavel提供的链接.

2> Rick Strahl..:

使行为保持一致的最简单方法是清除错误并使用Response.TrySkipIisCustomErrors并将其设置为true.这将覆盖页面内的IIS全局错误页面处理或Application_Error中的全局错误处理程序.

Server.ClearError();
Response.TrySkipIisCustomErrors = true;

通常,您应该在Application_Error处理程序中执行此操作,该处理程序处理应用程序错误处理程序未捕获的所有错误.

更多详细信息可以在这篇博文中找到:http: //www.west-wind.com/weblog/posts/745738.aspx


不适合我.IIS7配置是纯粹的黑魔法.
这对我来说也不起作用(IIS8),并且建议似乎与OP不匹配(假设我正确读取它).我想要**在Web.config中配置的`customError`来触发.使用`Response.TrySkipIisCustomErrors = true`我得到相同的行为:显示丑陋的服务器生成的错误页面.将它设置为"false"没有任何反应 - 一个空白的浏览器窗口.

3> Nicholas H..:

解决:事实证明,"详细错误"需要打开才能使IIS7"通过"您可能拥有的任何错误页面.见http://forums.iis.net/t/1146653.aspx

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有