dotnet核心设置Cache-Control无效

时间:2017-03-13 06:22:47

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

我已经配置了dotnet核心中间件来输出Cache-Control标头。我希望缓存所有静态内容,但最重要的是几个.png文件。 缓存标头 未输出?我使用的是dotnet核心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?}");
    });
}

代码被忽略,如下面的屏幕截图所示。

enter image description here

我也尝试过显式添加这样的标题,但是我收到错误,表明标题已经存在。

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

不知怎的,它被吃掉了。如果我设置了断点,则会调用代码。

1 个答案:

答案 0 :(得分:2)

你试图操纵请求标题。

class JmsExposerController {
   @Resource
   private JmsPersister persister;
   ...
   ...
}

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

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