在IIS7.5中,哪个模块可以移除400错误请求的主体?

23
我编写了ASP.NET(4.0)代码,如果向服务器提交的数据无效,就将Response.StatusCode设置为400。
我以请求接受标头要求的格式在响应正文中放置有用的信息。例如,一个html消息,显示“日期字段是必需的...”。

在Windows 7上的IIS7(7.5.7600)中,我会从浏览器获得正确的html响应。

但是,在Windows 2008上的IIS7(7.5.6000)中,我并没有得到html正文,而只是一个文本正文,内容为“Bad Request”。

有人可以告诉我如何更改2008服务器的配置来返回正文吗?
或者这些版本的IIS之间有什么区别吗?
也许Machine.config中有一个模块?例如,我知道(并且不得不解决)FormsAuthentication模块即使您不想要,也会将401更改为302。可能有一个模块可以阻止发送400的内容。

TIA。

2个回答

42

解决方案:编辑web.config文件中的system.webServer部分,并将httpErrors existingResponse属性设置为“PassThrough”,然后问题就解决了。
即:

<system.webServer>
    ...
    <httpErrors existingResponse="PassThrough"></httpErrors>
    ...
</system.webServer>

这个问题让我想起了两件事:

  1. 经典的CustomErrors行为,因为我在比较本地主机和远程服务器
  2. 第一个无法解释我的其他某些认证“错误”如何完整地通过

我四处搜索,在IIS7上发现了这篇文章:如何在IIS 7.0中使用HTTP详细错误信息

虽然它不能完全涵盖我在编辑web.config时遇到的情况,可能是因为我使用的是IIS7.5,但足以使我进入正确的领域。

此外,请注意,由于IIS 10现在支持HTTP2,包含文本的StatusDescriptions在请求升级到HTTP2时不再受支持,因此如果您响应400(错误请求),这将被削减为仅数字400。 "HTTP/2 does not define a way to carry the version or reason phrase that is included in an HTTP/1.1 status line."


非常感谢,伙计 :-) 我浪费了一天时间没有在Stackoverflow上正确地解决问题。 - Rudresha Parameshappa
<httpErrors errorMode="Custom"> 出现时似乎无法工作。 - Thomas Eyde

11
如果无法修改 web.config 文件,则下面的方法可能会有所帮助:
Response.TrySkipIisCustomErrors = true;

这可能对选择性应用有好处。在我的情况下,我只想让我的AJAX响应保持不变,以便客户端代码接收到为其设计的错误消息。 - Will

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