如何禁用所有 WebApi 响应的缓存以避免 IE 使用(来自缓存)响应
How to disable caching for all WebApi responses in order to avoid IE using (from cache) responses
我有一个简单的 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中,我只得到缓存的结果。
如何禁用所有网络 api 响应的缓存?
你可以添加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
应用于所需的 controller/action 来覆盖每个 controller/action。
有关详细信息,请参阅文档中的 ResponseCache attribute。
我有一个简单的 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中,我只得到缓存的结果。
如何禁用所有网络 api 响应的缓存?
你可以添加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
应用于所需的 controller/action 来覆盖每个 controller/action。
有关详细信息,请参阅文档中的 ResponseCache attribute。