我注意到 IIS 错误页面的行为有些奇怪。我的设置如下:
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="500" />
<error statusCode="500" responseMode="ExecuteURL" path="/error-page" />
</httpErrors>
有时,由于查询字符串太长而发生 ASP.NET 错误,然后在尝试执行错误页面 URL 时立即发生第二个错误。我已将问题追溯到 IIS 将原始 URL 附加到错误页面 URL 的事实,如下所示:
Original: http://example.com/someurl?id=some_very_long_query_string_causing_security_exception
Error: /error-page?500;http://example.com/someurl?id=some_very_long_query_string_causing_security_exception
这是一个大问题。如果原始 URL 因查询字符串太长而失败,那么附加内容的错误页面也会失败,因为它的查询字符串甚至更长!
我认为这是 IIS 中最愚蠢的错误。有人知道是否有针对该错误的服务包补丁吗?最坏的情况是,如果到现在还没有修复任何问题,有没有办法禁用此行为或有什么技巧可以阻止 IIS 将未经请求的内容附加到错误页面?因为它破坏了整个自定义错误页面机制。
答案1
在路径末尾添加斜杠(例如 path="/error-page/")将停止附加错误代码和 URL,请注意,它将保留原始失败的 URL,例如
- 如果有不尾部斜杠,则错误页面的内容将显示以下 URL: http://example.com/error-page?500;http://example.com/failingpage
- 如果结尾有斜杠,则错误页面的内容将显示以下 URL: http://example.com/failingpage
答案2
我很久以前就遇到过类似的问题,因此有问题的系统使用了静态错误页面。
您可以在 defaultResponseMode 中将其设置为将返回单个静态页面的文件。