.NET MVC добавляет пользовательские заголовки ко всем 302 ответам - PullRequest
0 голосов
/ 26 февраля 2019

В настоящее время у меня есть приложение mvc, которое находится за безопасным сторонним шлюзом.Этот шлюз кеширует 302 ответа, что в некоторых сценариях приводит к бесконечному циклу загрузки экранов в моем приложении.Я пытаюсь найти способ добавить пользовательские заголовки к ответу, но только на 302, поскольку я никогда не хочу, чтобы они кэшировались, однако моему приложению действительно необходимо кэшировать ресурсы других кодов состояния.Я знаю, что могу использовать:

<httpProtocol> 
  <customHeaders> 
    <add name="Cache-Control" value="max-age=0, no-cache, no-store, must-revalidate" /> 
    <add name="Pragma" value="no-cache" /> 
  </customHeaders> 
</httpProtocol>

, однако это установит заголовки кэша для всех ответов, а не только 302.Как мне добиться такого же поведения, но только для 302 перенаправлений?

Я также попытался создать для него специальный фильтр следующим образом:

public class CustomCacheHeaderFilter : ActionFilterAttribute
{
    public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
    {
        if(actionExecutedContext.Response.StatusCode == System.Net.HttpStatusCode.Redirect)
        {
            actionExecutedContext.Response.Headers.Add("Cache-Control", "max-age=0, no-cache, no-store, must-revalidate");
            actionExecutedContext.Response.Headers.Add("Pragma", "no-cache");
        }
    }
}

и зарегистрироваться в Global.asax:

protected void Application_Start(object sender, EventArgs e)
{
    GlobalConfiguration.Configuration.Filters.Add(new CustomCacheHeaderFilter());
}

однако это, похоже, не имеет никакого эффекта.Обратите внимание, что это приложение Sitefinity MVC.

1 Ответ

0 голосов
/ 26 февраля 2019

Похоже, что раздел <httpProtocol> файла web.config поддерживает раздел, который влияет только на перенаправления с именем <redirectHeaders>.См. здесь для документации.Пример использования, который решил мою проблему, выглядит следующим образом:

<httpProtocol> 
  <redirectHeaders> 
    <add name="Cache-Control" value="max-age=0, no-cache, no-store, must-revalidate" /> 
    <add name="Pragma" value="no-cache" /> 
  </redirectHeaders> 
</httpProtocol>
...