【问题标题】:IHttpModule inserting an inbound Filter break WCF, how to tweak Content-Length?IHttpModule 插入入站过滤器中断 WCF,如何调整 Content-Length?
【发布时间】:2010-12-14 10:27:27
【问题描述】:

在 ASP.NET 4.0 中,我有一个 IHttpModule,它在 HttpRequest.Filter 上应用过滤器。结果,内容流的长度发生了变化,并且由于正文长度和 HTTP 标头之间的不匹配,它破坏了 WCF,现在返回 400 bad request

知道如何解决 WCF 的这种行为吗?

【问题讨论】:

    标签: asp.net wcf httpmodule httprequest


    【解决方案1】:

    真正需要的只是删除错误的 Content-Length 标头,但这在 IIS6 中是不允许的。不确定集成管道模式下的 IIS7。对于使用您的过滤器的任何响应,请将此更新应用于标头。这个想法是获取内容类型(因此您不会破坏任何非文本响应)和存在的任何 cookie(因此您不会破坏身份验证),清除所有标题(以清除 Content-Length),然后设置内容类型和cookies。我们在 HttpApplication.ReleaseRequestState 事件中应用我们的过滤器,然后进行以下处理。 YMMV。

    HttpApplication app = (HttpApplication)sender;
    string ct = app.Response.ContentType;
    HttpCookie[] cookies = new HttpCookie[app.Response.Cookies.Count];
    app.Response.Cookies.CopyTo(cookies, 0);
    
    app.Response.ClearHeaders();
    
    app.Response.ContentType = ct;
    foreach (HttpCookie cookie in cookies) { app.Response.Cookies.Add(cookie); }
    

    【讨论】:

      【解决方案2】:

      【讨论】:

      • 是的,同样的问题。不幸的是,讨论只承认了问题,没有提供解决方案。
      猜你喜欢
      • 2012-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多