.Net CORE Web API 无缓存但仍然发生

2024-04-04

使用.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(使用前将#替换为@)

.Net CORE Web API 无缓存但仍然发生 的相关文章

随机推荐