有什么方法可以防止 IIS 自动覆盖返回 500 或 400 范围内的状态代码的 Web 应用程序的输出?
仅作为示例,在 ColdFusion 中我可以创建以下页面:
<cfheader statuscode="500" statustext="Error">
Sorry, an error occurred.
行为应该是,我看到一个显示“抱歉,发生错误。”的页面,并在标题中看到状态代码是 500。
相反,我看到的是:
Server Error
500 - Internal server error.
There is a problem with the resource you are looking for, and it cannot be displayed.
采用可爱的 IIS 风格。
我尝试删除 500 个自定义状态页面,但结果却是:
The page cannot be displayed because an internal server error has occurred.
没有任何可爱的造型。
看起来这种情况会发生在任何返回不在 200 或 300 范围内的代码的页面上。
答案1
这个问题在另外一个问题里有回答: IIS7 劫持了我的 Coldfusion 错误页面
解决方案似乎是更改配置,以便 IIS 忽略错误并允许其通过,因此设置
<httpErrors existingResponse="PassThrough" />
因此解决方案是改变 IIS 的行为,这是幸运的,因为要求每个现有的 Web 应用程序服务器改变其行为真的很愚蠢。
更新
请参见我在另一个类似问题中更新的答案找出原因和方法这个问题没有可行的答案。
答案2
显然有一种方法可以使用 Response.TrySkipIisCustomErrors 来实现这一点。下面的示例来自一个 aspx 页面,但应该可以适应您的用例。
下列网页内容过于广泛,无法在此重复。
http://www.west-wind.com/weblog/posts/2009/Apr/29/IIS-7-Error-Pages-taking-over-500-Errors
答案3
以下方法绝对有效:1. 打开网站或应用程序的错误页面 2. 点击右侧操作中的“编辑功能设置” 3. 选择“详细错误”并保存