【问题标题】:dotnet core setting Cache-Control has no effectdotnet core 设置 Cache-Control 没有效果
【发布时间】:2017-03-13 06:22:46
【问题描述】:

我已将 dotnet 核心中间件配置为输出 Cache-Control 标头。我希望缓存所有静态内容,尤其是几个 .png 文件。 缓存标头 没有输出?我使用的是 dotnet core 1.1.1。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    loggerFactory.AddConsole(this.Configuration.GetSection("Logging"));
    loggerFactory.AddDebug();
    app.UseStaticFiles(new StaticFileOptions
        {
            OnPrepareResponse = _ =>
            {
                var headers = _.Context.Request.GetTypedHeaders();
                headers.CacheControl = new CacheControlHeaderValue
                {
                    MaxAge = TimeSpan.FromHours(12)
                };
            }
        });

    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseIdentity();

    // Add external authentication middleware below. To configure them please see http://go.microsoft.com/fwlink/?LinkID=532715
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            "default",
            "{controller=Site}/{action=Site}/{id?}");
    });
}

代码被忽略,如下图所示。

我也尝试过像这样显式添加标头,但出现错误,表明标头已存在。

app.UseStaticFiles(new StaticFileOptions
{
    OnPrepareResponse = _ =>
    {
        _.Context.Request.Headers.Add("Cache-Control", "public,max-age=60");
    }
});

不知何故,它被吃掉了。如果我设置了一个断点,代码就会被调用。

【问题讨论】:

  • 您是否强制重新加载?它似乎说“磁盘缓存”,所以在这种情况下它可能甚至没有询问服务器信息是否合乎逻辑
  • 是的,我有,我用一个新的截图替换了这个截图。我也用提琴手检查过它,不知何故它没有被设置。我已经用www.webpagetest.org 测试了实时站点,这也表明没有设置标题。
  • 你需要添加到响应头。

标签: c# asp.net-mvc asp.net-core asp.net-core-mvc kestrel-http-server


【解决方案1】:

您试图操纵请求标头。

            var headers = _.Context.Request.GetTypedHeaders();
            headers.CacheControl = new CacheControlHeaderValue
            {
                MaxAge = TimeSpan.FromHours(12)
            };

浏览器需要响应头,而不是请求头。将缓存控制添加到响应标头。无论是直接还是通过 CacheHeader 属性都没有关系。

_.Context.Response.Headers.Append("Cache-Control", string.Format("public,max-age={0}", TimeSpan.FromHours(12).TotalSeconds));

【讨论】:

猜你喜欢
  • 2021-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-15
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 2022-11-17
相关资源
最近更新 更多