Http-заголовки, установленные в базовом контроллере?

#c# #asp.net-mvc #http

#c# #asp.net-mvc #http

Вопрос:

Я пытаюсь установить Http-заголовок для каждого запроса страницы веб-сайта. Для этого код для добавления заголовка (ответа.AppendHeader(«p3p», «{HeaderInfoHere}»)) помещается в переопределение OnActionExecuted базового контроллера (поэтому он вызывается всякий раз, когда вызывается какое-либо действие).

Проблема в том, что, поскольку заголовок добавляется при каждом вызове действия (все наши другие контроллеры наследуются от базового контроллера), заголовок добавляется снова и снова в зависимости от того, сколько других действий (частичных просмотров и т. Д.) Вызывается Как часть первоначального запроса.

Я не могу запросить коллекцию заголовков объекта ответа — мы получаем исключение, не поддерживаемое платформой, из-за того, что на нашем сервере отключен режим интегрированного конвейера IIS (что-то, что я не могу изменить), поэтому я не могу напрямую проверить, был ли этот заголовок уже добавлен.

Кто-нибудь может предложить лучший способ добавления заголовка (один раз) к запросу GET в MVC или обходной путь для этого сценария?

Комментарии:

1. Я не думаю, что вы можете добавить заголовок в модуль, не находящийся в интегрированном режиме. Я думаю. Моя память нечеткая 🙂

2. Кажется, я могу добавить их НОРМАЛЬНО — просто не читайте коллекцию заголовков в code: S

Ответ №1:

Добавьте данные в свой ControllerContext (возможно, в RouteData), указав в своем коде «Я уже добавил этот заголовок», который вы проверяете перед его добавлением. Вы также можете попробовать использовать сеанс (и прежде, чем кто-либо захлебнется — TempData уже использует его)

Сеанс доступен через ControllerContext.HttpContext.Session