IHttpModule вставка входящего фильтра разрыва WCF, как настроить Content-Length? - PullRequest
0 голосов
/ 14 декабря 2010

В ASP.NET 4.0 у меня есть IHttpModule, который применяет фильтр к HttpRequest.Filter. В результате длина потока контента изменяется, и он нарушает WCF, а теперь возвращает 400 bad request из-за несоответствия между длиной тела и заголовками HTTP.

Есть идеи, как решить это поведение WCF?

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Все, что действительно необходимо, - это удалить ошибочный заголовок Content-Length, но это не разрешено в IIS6. Не уверен насчет IIS7 в режиме интегрированного конвейера. Для любого ответа, который использует ваш фильтр, примените это обновление к заголовкам. Идея состоит в том, чтобы получить тип содержимого (чтобы вы не нарушали нетекстовые ответы) и какие-либо файлы cookie (чтобы не нарушать аутентификацию), очистить все заголовки (чтобы очистить Content-Length), а затем установить тип контента и куки снова. Мы применяем наш фильтр в событии 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); }
0 голосов
/ 14 декабря 2010
...