我们有一个 HttpHandler,它直接处理来自自定义客户端软件的 HTTP 上的二进制帖子。客户端软件偶尔会发送导致 IIS 7 响应 400 - 错误请求的数据。由于“400 Bad Request”的特殊之处在于 HTTP.SYS 在内核模式下透明地处理它而不通知用户模式任何内容,因此不会引发任何错误以在 ASP.NET 中处理。是否可以在 ASP.NET 中捕获此 http 400,以便在这些场景中将特定数据写入响应流?重定向到另一个页面不是一个选项,因为它需要在当前请求/响应中。
duckworth
问问题
4231 次
3 回答
2
如果您知道导致 400 的原因,那么您可以通过注册表自定义 http.sys 的行为来处理它:
http://support.microsoft.com/kb/820129
但是,您应该意识到这样做可能会对安全性和性能产生影响。
另一种选择是在 IIS 之前使用过滤代理,从而在请求继续之前捕获请求。
于 2008-12-05T11:21:02.343 回答
2
相反,我会要求他们修复自定义客户端软件。给他们一份显示失败请求的报告。如果可以,请运行 Wireshark 之类的嗅探器,如果他们不认为问题出在他们的软件上,则将数据包发送给他们。
于 2009-04-29T15:35:24.170 回答
1
如果您的自定义客户端导致 IIS 触发 HTTP 400,则它可能存在缺陷并且未根据标准提交有效的 HTTP 请求。如果您可以更改客户端,那将是正确的做法。否则,您使用的不是 HTTP,而 IIS 旨在处理 HTTP 请求。因此,您应该为您自己的协议运行自定义服务器(这是一种非标准的 HTTP 之类的东西)。
不建议使用 IIS/ASP.NET 来处理这样的请求,因为它可能会导致一些奇怪的意外事情发生。
于 2008-12-05T13:36:12.587 回答