使用.Net Core 和 Visual Studio 2015。
我在 .net core 中创建了一个 Web API,最近在测试中我意识到我的结果正在被缓存(或至少看起来是)。所以我实现了一个响应缓存并将位置设置为无:
[Route("api/[controller]")]
public class NopProductController : Controller
{
private INopProductService _nopProductService { get; set; }
public NopProductController(INopProductService nopProductService)
{
_nopProductService = nopProductService;
}
[HttpGet]
[ResponseCache(Duration = 60, Location = ResponseCacheLocation.None)]
public IActionResult GetChangedProducts()
{
return Ok(_nopProductService.GetChanged());
}
}
当我检查 Postman 并检查标题时,我发现:
缓存控制→无缓存,最大年龄=60
Pragma →无缓存
我相信这看起来是正确的。但是,当我在 Sql Server 2012 DB 中编辑相关表上的数据(我更改 1 个单元格值)然后刷新请求时,更改不存在。
如您所见,缓存似乎已关闭。那么为什么没有发生任何更改,只有当我重置 IIS 时更改才会生效。
这是 Kestrel 和 IIS 的问题吗?这里有什么错误或者我错过了什么吗?
注意:WebAPI 在本地发布用于测试 + 通过 Windows 10 上的 IIS 托管。
要请求缓存,您应该设置NoStore = true
在 - 的里面ResponseCache
属性类并删除Duration
属性。
设置此属性后,您将获得此标头:
Cache-Control: no-store,no-cache
Pragma: no-cache
正如评论中提到的,这是与实体框架 6 相关的缓存问题,为了避免缓存,您应该使用AsNoTracking()
就在转换类型方法之前,当然如果你有的话。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)