我们有一个HttpHandler直接处理来自自定义客户端软件的二进制POST HTTP数据。客户端软件偶尔会发送导致IIS 7响应400-错误的数据请求。由于“400 Bad Request”在HTTP.SYS中特殊处理且在内核模式下透明地处理它,而不通知用户模式任何内容,因此没有错误被引发以供ASP.NET处理。是否可以在ASP.NET中捕获此http 400错误,以便在这些情况下向响应流写入特定数据?重定向到另一个页面不是选项,因为它需要在当前请求/响应中进行。
我建议你让他们修复客户端软件。向他们展示失败请求的报告。如果可以的话,运行像Wireshark这样的嗅探器并将数据包发送给他们,以便他们相信问题不在他们的软件上。
如果您的自定义客户端导致IIS触发HTTP 400错误,那么它可能存在缺陷,并且未按照标准提交有效的HTTP请求。如果您可以更改客户端,则应该这样做。否则,您正在处理的不是HTTP,而IIS设计用于处理HTTP请求。因此,您应该为自己的协议(类似非标准HTTP的东西)运行自定义服务器。
不建议使用IIS/ASP.NET处理此类请求,因为可能会导致一些奇怪的意外情况发生。