.NET MVC 向所有 302 响应添加自定义 headers

.NET MVC add custom headers to all 302 responses

我目前有一个位于安全 third-party 网关后面的 mvc 应用程序。此网关正在缓存 302 响应,这在某些情况下会导致我的应用程序中出现无限循环的加载屏幕。我试图找到一种方法来将自定义 headers 添加到响应中,但仅限于 302s,因为我从不希望它们被缓存,但是我的应用程序确实需要缓存其他状态代码的资源。我知道我可以使用:

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

然而,这将为所有响应设置缓存 headers,而不仅仅是 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 应用程序。

看起来 web.config 的 <httpProtocol> 部分支持一个只影响名为 <redirectHeaders> 的重定向的部分。有关文档,请参阅 here。解决我的问题的示例用法如下:

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