Как отключить кэширование ответов для всех контроллеров в ASP.NET Core MVC, но сохранить для статических файлов?

#c# #asp.net-core-mvc

#c# #asp.net-core-mvc

Вопрос:

У меня есть приложение, которое вызывает запросы html / json по одному и тому же URL, изменяя его с помощью Accept заголовка запроса.

 public IActionResult Index()
{
    return View();
}

[ActionName(nameof(Index))]
[AcceptHeader(MediaTypeNames.Application.Json)]
public async Task<IActionResult> IndexJson()
{
    // ...some kind of magic here.

    return Json(model);
}
  

Это работает, но когда в app.UseResponseCaching() не Startup.cs определено и выполняется ajax-запрос (в ответе нет Content-Control заголовка), браузер запоминает последний json-ответ с заданным URL и показывает его в необработанном виде на белом экране вместо того, чтобы делать новый запрос на html-версию при переходе по истории назад / вперед.

Быстрое исправление для предотвращения кэширования (протестировано, raw больше нет):

 [ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
public class HomeController { ...
  

Но я не хочу определять этот атрибут вручную на всех контроллерах. Как установить это правило в ConfigureServices для динамического вывода по умолчанию, сохраняя кэширование для статических файлов?

Комментарии:

1. afaik, вы можете установить cache: false в запросе ajax, чтобы отключить суперкеширование (не уверен, решает ли это вашу проблему, хотя)