Как отключить кэширование для всех ответов WebApi, чтобы избежать использования IE (из кэша) ответов - PullRequest
1 голос
/ 15 апреля 2019

У меня есть простой контроллер ASP.NET Core 2.2 Web Api:

[ApiVersion("1.0")]
[Route("api/[controller]")]
[ApiController]
public class TestScenariosController : Controller
{
   [HttpGet("v2")]
    public ActionResult<List<TestScenarioItem>> GetAll()
    {
        var entities = _dbContext.TestScenarios.AsNoTracking().Select(e => new TestScenarioItem
        {
            Id = e.Id,
            Name = e.Name,
            Description = e.Description,
        }).ToList();

        return entities;
    }
}

Когда я запрашиваю это действие из углового приложения, используя @angular/common/http:

this.http.get<TestScenarioItem[]>(`${this.baseUrl}/api/TestScenarios/v2`);

В IE11 я получаю только кэшированный результат.

Как отключить кеш для всех ответов веб-API?

enter image description here

enter image description here

1 Ответ

0 голосов
/ 15 апреля 2019

Вы можете добавить ResponseCacheAttribute к контроллеру, например так:

[ApiVersion("1.0")]
[Route("api/[controller]")]
[ApiController]
[ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)]
public class TestScenariosController : Controller
{
    ...
}

Вы также можете добавить ResponseCacheAttribute в качестве глобального фильтра, например:

services
    .AddMvc(o =>
    {
        o.Filters.Add(new ResponseCacheAttribute { NoStore = true, Location = ResponseCacheLocation.None });
    };

Это отключает все кэширование для запросов MVC и может быть переопределено для каждого контроллера / действия, снова применив ResponseCacheAttribute к требуемому контроллеру / действию.

См. Атрибут ResponseCache в документации для получения дополнительной информации.

...