Как я могу сказать, когда HTTP-заголовки были отправлены в приложении ASP.NET?

Короче говоря, у меня есть приложение ASP.NET, которое я пытаюсь отладить и в какой-то момент при очень конкретных обстоятельствах, приложение выдаст исключения в a Response.Redirect() утверждение:

"Cannot redirect after HTTP headers have been sent."

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

Там что-то должно искать в приложении ASP.NET, которое укажет, что HTTP-заголовки были отправлены?

БОНУСНАЯ ТРУДНОСТЬ: приложение ASP.NET находится все еще в.NET 1.1. Обстоятельства относительно задержки позади обновления являются действительно больным вопросом.

15
задан Tom Kidd 4 March 2010 в 20:15
поделиться

1 ответ

HttpApplication имеет событие PreSendRequestHeaders , которое вызывается только при записи заголовков. Подпишитесь на это и запишите это или добавьте точку останова.

Кроме того, HttpResponse имеет внутреннее свойство , называемое HeadersWritten (поле _headersWritten в .NET 1.1). Поскольку он внутренний, вы не можете получить к нему доступ напрямую, но можете через отражение. Если это только для внутренней отладки (т.е. не для производственного кода), тогда можно использовать отражение.

Проверяйте этот метод до / после всех событий жизненного цикла страницы. Как только вы узнаете, какое событие записывает заголовки, добавьте дополнительные проверки HeadersWritten , чтобы узнать, куда они записываются. Вы его найдете, постепенно сужая количество проверок до этого свойства.

Новое свойство info

HeadersWritten открыто, начиная с .Net 4.5.2

18
ответ дан 1 December 2019 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: