Определите, что http-заголовки asp.net уже отправлены - PullRequest
12 голосов
/ 21 сентября 2010

Я добавляю заголовки на страницу следующим образом: Page.Response.AddHeader ("foo", "bar");

В зависимости от предыдущей обработки иногда происходит сбой с "Сервер не может добавить заголовок после HTTPзаголовки были отправлены. "Я имею дело с этим путем включения Page.Response.AddHeader ("foo", "bar");в конструкции try-catch.Тем не менее, чтобы сделать вещи чище и избежать генерации исключения, есть ли способ обнаружить, что заголовки уже отправлены?(Кстати, если я пытаюсь оценить Page.Response.Headers, я получаю следующую ошибку: «Эта операция требует интегрированного режима конвейера IIS»)

Спасибо

Ответы [ 4 ]

13 голосов
/ 04 апреля 2012

Вы можете использовать HttpModule для регистрации на событие PreSendRequestHeaders. Когда он вызывается, запишите значение в HttpContext.Current.Items, указывающее, что заголовки отправляются, а затем везде в вашем коде вы проверяете значение в HttpContext.Current.Items, чтобы увидеть, было ли оно отправлено.

10 голосов
/ 24 марта 2016

Начиная с .NET 4.5.2, вы можете сделать это с помощью общедоступного HeadersWritten свойства HttpResponse (см. Документация MSDN ):

if (HttpContext.Current.Response.HeadersWritten) { ... }
7 голосов
/ 21 сентября 2010

К сожалению, хотя объект HttpResponse имеет свойство HeadersWritten и вспомогательное поле _headersWritten, ни одно из них не доступно извне сборки System.Web - если только вы не используете Reflection.Мне не ясно, что, по вашему мнению, вы сможете получить из коллекции Заголовков, может она существовать или не существовать, независимо от того, были ли отправлены заголовки.

Если вы хотите использовать Reflection,у него могут быть собственные потери производительности, и для этого потребуется, чтобы ваше приложение работало с полным доверием.

Все общедоступные методы в HttpResponse, которые включают поле _headersWritten, по-видимому, используют его для создания исключения.*

0 голосов
/ 21 сентября 2010

Попытка установить для буфера значение false:

http://msdn.microsoft.com/en-us/library/950xf363.aspx

Это облегчит вашу первую проблему, но ваша производительность и пользовательский опыт могут пострадать.Также «Эта операция требует интегрированного режима конвейера IIS» относится к тому, что сервер не-IIS 7 обрабатывает эту строку кода.Вы можете найти больше информации об этом здесь:

http://forums.asp.net/p/1253457/2323117.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...