如何为所有WebApi响应禁用缓存,以避免IE使用(从缓存)响应

时间:2019-04-15 08:43:41

标签: c# caching asp.net-core asp.net-core-webapi http-caching

我有一个简单的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中,我只得到缓存的结果。

如何禁用所有Web API响应的缓存?

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以将ResponseCacheAttribute添加到控制器,如下所示:

function getComboRefer(type, option) {
    return (comboReferData.find(o => o.wagerType === type) || {})[option];
}

var comboReferData = [{ wagerType: 1, count: 2 }, { wagerType: 2, count: 11 }];

console.log(getComboRefer(2, 'count'))

您还可以将[ApiVersion("1.0")] [Route("api/[controller]")] [ApiController] [ResponseCache(NoStore = true, Location = ResponseCacheLocation.None)] public class TestScenariosController : Controller { ... } 添加为全局过滤器,如下所示:

ResponseCacheAttribute

这将禁用MVC请求的所有缓存,并且可以通过将services .AddMvc(o => { o.Filters.Add(new ResponseCacheAttribute { NoStore = true, Location = ResponseCacheLocation.None }); }; 再次应用于所需的控制器/操作来针对每个控制器/操作来覆盖。

有关更多信息,请参见文档中的ResponseCache attribute