Настройка ядра dotnet Cache-Control не влияет

Я настроил промежуточное ПО dotnet core для вывода заголовков 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");
    }
});

Как-то съедается. Если я устанавливаю точку останова, код вызывается.


person Jim    schedule 13.03.2017    source источник
comment
Вы принудительно перезагрузили? Кажется, это говорит о дисковом кеше, поэтому, вероятно, в этом случае он даже не спрашивал сервер, логична ли информация.   -  person Sami Kuhmonen    schedule 13.03.2017
comment
Да, я заменил скриншот на новый, показывающий это. Я также проверил это с помощью скрипача, почему-то он не устанавливается. Я протестировал работающий сайт с www.webpagetest.org, что также указывает на то, что заголовки не устанавливаются.   -  person Jim    schedule 13.03.2017
comment
вам нужно добавить в заголовок ответа.   -  person levent    schedule 13.03.2017


Ответы (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));
person levent    schedule 13.03.2017
comment
у меня не сработало stackoverflow.com/questions/54549204/ - person Jitendra Pancholi; 06.02.2019