在 IIS 8.5(Win 2012 R2)中,为什么 ASP.NET 错误会返回“200 OK”状态码并呈现空白页面?

17
我已经设置了一个运行IIS 8.5的新Windows 2012 R2服务器。我们注意到,当出现错误时(例如ASP.NET状态服务未运行),请求返回完全空白的页面(只有头部 - 没有内容),而不是输出500状态码的错误屏幕。我们需要看到错误信息,而针对错误提供200 OK会给像Google等索引工具或任何监控网站的工具带来很大问题(这将无法通知我们该网站已下线)。在我们的其他服务器上(IIS 7),我们看到“黄色错误屏幕”,上面显示类似“无法连接到状态服务器”的消息(或类似消息)。可能出了什么问题?是否有某些设置可以全局禁用所有错误(但如果也提供200状态代码,这将很愚蠢),还是可能有其他问题阻碍了正常运行?唯一可能干扰的另一件事是我们在服务器上安装了ISAPI_Rewrite(但这通常不会导致此问题)。谢谢!

1
检查您的错误页面设置,尝试禁用重写模块进行测试。 - Brock Hensley
尝试在IIS中使用失败请求跟踪工具以获取有关问题发生的位置(在哪个阶段)以及负责该问题的原因的更多详细信息。 - TonyCool
我曾经遇到过类似的问题,通过安装“HTTP 重定向”模块解决了这个问题。该模块并未包含在默认安装中。 - gordy
7个回答

24

在Windows 8上出现了类似的问题。

在设置中搜索“打开或关闭Windows功能”。

检查以下功能是否已启用

“/Internet Information Services/World Wide Web Services/Common HTTP Features/HTTP Errors”。 "/Internet Information Services/World Wide Web Services/Common HTTP Features/Static Content"。


开发本地 .net 网站时,还需检查 "/Internet Information Services/World Wide Web Services/Application Development Features/ASP.Net 3.5" 和 "/Internet Information Services/World Wide Web Services/Application Development Features/ASP.Net 4.5"。 - Adam
在我升级到Win10后从8.1时也出现了同样的问题。谢谢 :) - Diego Jancic
杀毒软件会影响这个问题吗?因为我已经安装了所有提到的功能,但仍然出现错误500-19。 - Younis Qadir

9

您需要确保ASP模块中未启用服务器端调试。

经典ASP服务器返回500错误时会返回200。尝试打开服务器端调试应用程序,但无法找到该应用程序,因此IIS返回200响应和空白页面。


7

请确保在Global.asax.cs的Application_Error中没有调用Server.ClearError(),这可能是我的问题所在。


谢谢!问题解决了!我不知道为什么这个东西一开始会被添加到我们的项目中。在开发模式下隐藏错误是很糟糕的! - TetraDev

3
拆除所有Global.asax代码帮助我找到了错误的原因。之后,IIS开始按预期返回错误页面。然后,应用修复后,我又将Global.asax代码恢复了。也许这个案例对你有所帮助。

这是一种很好的方法,用于查找自定义错误处理中的错误。如果您已经实现了这个方法。 - DeadlyChambers
太好了,这让我能够追踪到实际的错误。 - Rich S

1
当我请求目录中设置为默认页的Default.aspx时,出现了类似的问题。服务器返回状态200,但内容为空。
在这种情况下,将应用程序池的托管管道模式从集成切换到经典模式可以解决问题。

0

请确保已启用HTTP激活


这是6年前的事情了... 我相当确定我最终修好了它 :) - NickG

0

我遇到了相同的症状,但在我的情况下,这是因为.NET信任级别比应用程序要求的级别低。
在IIS管理器中>连接>您的服务器>.NET信任级别,将信任级别更改为完全解决了问题。 输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接