Какая альтернатива 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);





Всякий раз, когда вы хотите что-то кэшировать, не доверяйте клиенту. Клиент может легко проигнорировать это и снова и снова спрашивать ваш 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();
}
}
}
хорошо, я обновил свой ответ. Надеюсь, поможет. не могли бы вы обновить свой вопрос и упомянуть статические файлы =)
Привет спасибо. Но я имею дело со статическими файлами. Следовательно, у меня есть логика кеширования как часть промежуточного программного обеспечения, а не в контроллере.