.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>
我目前有一个位于安全 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>