UWP应用中的HttpClient缓存

3

我同时拥有WebApi服务器(asp.net core应用程序)和客户端(UWP应用程序)。

我使用HttpClient从UWP应用程序调用WebApi服务。

一些资源是只读的,因此可以进行缓存:

[ResponseCache(Duration = 60*60*12, VaryByQueryKeys = new[] { "id" }, Location = ResponseCacheLocation.Client)]`
[HttpGet("{id}")]
public IActionResult Get(string id) { ... }

在UWP应用程序中,是否可以启用HttpClient缓存,还是必须自己实现?


你想使用哪种缓存方式?如果你不想使用简单的内建功能,有一些外部库可以提供客户端缓存的简便方法。例如:[CacheCow](https://github.com/aliostad/CacheCow)和[Cashew](https://github.com/joakimskoog/Cashew)。 - Joakim Skoog
1个回答

0

HttpClient 已经具有良好的缓存功能。如果默认的缓存行为不足以满足需求,您可以通过 HttpCacheControl 类进一步控制缓存,该类将读取和写入行为分开。

更重要的是了解如何使用您的 HttpClient。即使它实现了 IDisposable 接口,您也不应该对其进行处理,而是应该在整个应用程序中保持一个单一的 HttpClient 对象,它被设计为可重复使用

HttpClient 无法在断开连接时返回缓存结果。因此,还有其他库,例如 Akavache,它创建了一个离线键值存储。


我没有处理 HttpClient,而是使用单例模式,但它仍然向 Web 服务器发出相同的请求(通过 Fiddler 观察到)。为什么? - Liero
顺便提一下:您可以在HttpClient的HttpBaseProtocolFilter上设置缓存标志,以仅从缓存获取数据。它专门设计用于处理“无网络”情况。(但始终记住,http缓存不是数据库!系统可能会决定从缓存中删除某些内容或永远不将其添加到缓存中。您知道,出于某些原因)。 - PESMITH_MSFT

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