如何禁用所有WebApi响应的缓存以避免IE使用(来自缓存的)响应。

15

我有一个简单的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 从 Angular 应用程序查询此操作时:

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

在IE11中,我只得到了缓存的结果。

如何禁用所有web api响应的缓存?

输入图像描述

输入图像描述

1个回答

32

您可以像这样将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属性


很奇怪,我在一个 .net 6 asp.net 应用程序中确实做了这个,但我仍然没有从 API 控制器中收到正确的缓存相关响应头。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接