2013-09-09 5 views
2

Согласно этой информации, предоставленной командой Asp.Net What not to do in Asp.net, вы не должны использовать PreSendRequestHeaders в управляемом HttpModule.PreSendRequestHeaders альтернатива в HttpModule

PreSendRequestHeaders и PreSendRequestContext

Рекомендация: Не используйте эти события с управляемыми модулями.

В PreSendRequestHeaders и событие PreSendRequestContext могут быть использованы с собственными модулями IIS, но не с помощью управляемых модулей, реализующих IHttpModule. Установка этих свойств может вызвать проблемы с асинхронными запросами .

Это именно то, что я делаю в своем Image Processing Library, чтобы гарантировать, что правильный тип mime будет отправлен вместе с ответом.

Каким будет рекомендуемый альтернативный подход?

ответ

1

Если вы посмотрите на HttpApplication трубопровода на MSDN's ASP.NET App Life Cycle странице вы найдете PreSendRequestHeaders и PreSendRequestContent события в самом низу. Теперь, когда они предполагают, что мы не используем их в управляемых IHttpModule s, следующим ближайшим событием в конвейере будет EndRequest, что является детерминированным, в отличие от событий PreSendRequest *.

Мне не удалось найти информацию о том, какая предпочтительная практика сейчас предназначена для указания заголовков ответов, но это будет работать для вас.

+0

Интересно. Спасибо. Я подтвержу это, как только подтвержу. –

+1

Слишком плохо, это не сработает. «EndRequest» слишком поздно, это приведет к исключению. См. Http://stackoverflow.com/questions/7198205/exception-thrown-in-end-request-when-adding-headers – Julian

0

В обработчике для BeginRequest используйте HttpResponse.AddOnSendingHeaders, чтобы подписаться на обработчик для этого события.

Это по существу то же самое, что и PreSendRequestHeaders, однако он полностью обрабатывается в конвейере ASP.NET, поэтому он не имеет таких же проблем с интерфейсом native/managed, который делает PreSendRequestHeaders.

Смежные вопросы