** 2021 年 1 月 27 日更新 ** 我一直在与 Microsoft 合作解决此问题,我们进行了请求跟踪并查看了 FREB 日志并确认代码正在输出正确的标头,但在 END_REQUEST 处理程序中它们被替换为缓存-控制私人。在从头开始构建几个虚拟机之后,我们了解到开箱即用,这个问题不会发生。但是,当我们安装最新版本的 STACKIFY AGENT (4.29.29) 时,一旦我们把代理放在这种行为上就会发生。旧版本的 Stackify 代理(RETRACE 分析器和 APM)不这样做,但到目前为止,这是不可逆转的:一旦我们安装了 Stackify 的 4.29.29,卸载或安装旧版本并不能解决这个问题,环境不知何故永久修改。
STACKIFY 回应了一个可行的解决方案(但建议卸载后留下一些东西):设置环境变量 STACKIFY_ENABLERUM = false .. 我们尝试了这个并且 IIS 返回了我们正确的标头而不用缓存控制替换它:私有。
我想使用 CloudFront CDN 将流量缓存到我的 API,以便将请求卸载到内容分发网络。
我正在尝试将 Cache-Control 标头设置为返回:Cache-Control:“public, max-age=10”。当我在 Visual Studio 2019 中运行我的代码进行调试时,我得到了正确的标头。但是,当我将它部署到 IIS 时,我总是会返回:
缓存控制:私有
我正在使用 IIS 版本 10.0.17763.1 运行 Windows Server 2019。我正在使用带有 Web API 2 的 ASP.NET MVC 来操作 REST API。
在我的代码中,我创建了这个属性:
代码:
public class CacheControlAttribute : System.Web.Http.Filters.ActionFilterAttribute
{
public int MaxAge { get; set; }
public CacheControlAttribute()
{
MaxAge = 0;
}
public override void OnActionExecuted(HttpActionExecutedContext context)
{
// Don't set the cache header if there was an error or if there was no content in the response
if (context.Response != null && context.Response.IsSuccessStatusCode)
{
context.Response.Headers.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue
{
Private = false,
Public = true,
MaxAge = TimeSpan.FromSeconds(MaxAge)
};
}
base.OnActionExecuted(context);
}
}
然后我用这个属性装饰我的方法:
[CacheControl(MaxAge = 10)]
我阅读了几篇关于 StackOverflow 的文章,但无法解决这个问题。我还尝试将其添加到 web.config:
它没有帮助。
我在一台 IIS 服务器上成功运行,相同版本的 IIS 但我的代码版本较旧。我在新的 IIS 服务器上设置它时遇到问题,我认为这是一个 IIS 配置问题,但我不确定。也许它在我的 web.config 中。
感谢您对此的任何帮助。