代码之家  ›  专栏  ›  技术社区  ›  John Lemp Chris Heald

ASP.NET httphandler能否处理HTTP 400-错误请求?

  •  9
  • John Lemp Chris Heald  · 技术社区  · 16 年前

    我们有一个httphandler,它直接处理来自定制客户机软件的通过http的二进制文章。客户端软件偶尔会发送数据,导致IIS7以400错误的请求响应。由于“400坏请求”是特殊的,因为HTTP.sys在内核模式下透明地处理它,而不通知用户模式任何内容,所以不会在ASP.NET中引发要处理的错误。是否可以在ASP.NET中捕获此HTTP 400,以便在这些场景中将特定数据写入响应流?重定向到另一个页面不是一个选项,因为它需要在当前请求/响应中。

    3 回复  |  直到 16 年前
        1
  •  2
  •   Dave R.    16 年前

    如果您知道导致400的原因,那么您可以通过注册表自定义http.sys的行为来处理它:

    http://support.microsoft.com/kb/820129

    但是,您应该知道这样做可能会对安全性和性能产生影响。

    另一种选择是在IIS之前使用过滤代理,从而在请求进一步执行之前捕获请求。

        2
  •  2
  •   james2code    16 年前

    我会要求他们修复定制的客户机软件。给他们一份显示失败请求的报告。如果你能,运行一个嗅探器,比如wireshark,如果他们不相信问题出在他们的软件上,就把包发送给他们。

        3
  •  1
  •   Mehrdad Afshari    16 年前

    如果您的自定义客户端导致IIS触发HTTP 400,那么它可能有缺陷,并且没有按照标准提交有效的HTTP请求。如果你能改变客户,这将是正确的做法。否则,您使用的不是HTTP,而IIS是为处理HTTP请求而设计的。因此,您应该为自己的协议运行一个自定义服务器(这是一个非标准的类似HTTP的东西)。

    不建议使用IIS/ASP.NET来处理这样的请求,因为它可能会导致一些奇怪的意外事件发生。