【发布时间】:2010-12-14 10:27:27
【问题描述】:
在 ASP.NET 4.0 中,我有一个 IHttpModule,它在 HttpRequest.Filter 上应用过滤器。结果,内容流的长度发生了变化,并且由于正文长度和 HTTP 标头之间的不匹配,它破坏了 WCF,现在返回 400 bad request。
知道如何解决 WCF 的这种行为吗?
【问题讨论】:
标签: asp.net wcf httpmodule httprequest
在 ASP.NET 4.0 中,我有一个 IHttpModule,它在 HttpRequest.Filter 上应用过滤器。结果,内容流的长度发生了变化,并且由于正文长度和 HTTP 标头之间的不匹配,它破坏了 WCF,现在返回 400 bad request。
知道如何解决 WCF 的这种行为吗?
【问题讨论】:
标签: asp.net wcf httpmodule httprequest
真正需要的只是删除错误的 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); }
【讨论】:
【讨论】: