SetValidUntilExpires альтернатива - PullRequest
0 голосов
/ 24 мая 2018

Какая альтернатива для context.Response.SetValidUntilExpires(true) в ядре asp.net?
Я проверил заголовки в приложении asp.net и не смог найти никаких изменений при установке флага как true или false.

context.Response.Cache.SetExpires(DateTime.Now.AddDays(7));
context.Response.Cache.SetValidUntilExpires(true);
context.Response.Cache.SetCacheability(HttpCacheability.Public);

1 Ответ

0 голосов
/ 24 мая 2018

Когда вы хотите что-то кэшировать, не доверяйте клиенту.Клиент может легко проигнорировать это и спрашивать ваш API снова и снова.Лучшим подходом было бы использовать методы кэширования на стороне сервера.

Однако для решения вашей проблемы можно использовать ResponseCacheAttribute .Вот пример.

using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;

namespace WebApplication1.Controllers
{
    [Route("api/[controller]")]
    public class ValuesController : Controller
    {
        // GET api/values
        [HttpGet]
        [ResponseCache(Duration = 123, VaryByHeader = "User-Agent")]
        public IEnumerable<string> Get()
        {
            return new string[] {"value1", "value2"};
        }

    }
}

В случае, если вы обслуживаете статические файлы.Кэширование достигается путем настройки его в файле Startup.cs вашего проекта.

Вот пример:

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using System;

using Microsoft.Net.Http.Headers; // required

namespace WebApplication1
{
    public class Startup
    {
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            var durationInSeconds = (int) TimeSpan.FromDays(1).TotalSeconds;
            app.UseStaticFiles(new StaticFileOptions
            {
                OnPrepareResponse = context =>
                {
                    context.Context.Response.Headers[HeaderNames.CacheControl] =
                        $"public,max-age={durationInSeconds}";
                }
            });

            app.UseMvc();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...