IHttpModule插入一个入站Filter break WCF,如何调整Content-Length?

时间:2010-12-14 10:27:27

标签: asp.net wcf httpmodule httprequest

在ASP.NET 4.0中,我有IHttpModuleHttpRequest.Filter上应用过滤器。结果,内容流长度发生了变化,并且由于主体长度和HTTP标头之间的不匹配而导致WCF中断,现在返回400 bad request

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

2 个答案:

答案 0 :(得分:2)

真正需要的只是删除错误的Content-Length标头,但IIS6中不允许这样做。在集成管道模式下不确定IIS7。对于使用过滤器的任何响应,请将此更新应用于标头。我们的想法是获取内容类型(因此您不会破坏任何非文本响应)和任何存在的cookie(因此您不会破坏身份验证),清除所有标头(以清除Content-Length),然后设置内容类型和cookie再次。我们在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); }

答案 1 :(得分:0)