UWP 应用中的 HttpClient 缓存
Posted
技术标签:
【中文标题】UWP 应用中的 HttpClient 缓存【英文标题】:HttpClient caching in UWP apps 【发布时间】:2017-08-14 10:43:57 【问题描述】:我同时拥有 WebApi 服务器(asp.net 核心应用)和客户端(UWP 应用)。
我使用 UWP 应用中的 HttpClient 调用 WebApi 服务。
有些资源是只读的,因此可以缓存:
[ResponseCache(Duration = 60*60*12, VaryByQueryKeys = new[] "id" , Location = ResponseCacheLocation.Client)]`
[HttpGet("id")]
public IActionResult Get(string id) ...
是否可以在 UWP 应用的 HttpClient 中启用缓存,还是我必须自己做?
【问题讨论】:
您希望使用哪种缓存?如果您不想使用简单的内置功能,可以使用外部库添加一种在客户端上缓存的简单方法。示例:CacheCow 和 Cashew 【参考方案1】:HttpClient 已经(很好)缓存了自己。如果默认的缓存行为不够用,还可以通过HttpCacheControl类对缓存进行进一步的控制,该类将读写行为分开。
更重要的是知道如何使用您的 HttpClient。即使它实现了 IDisposable,您也不应该释放它,而是在整个应用程序中保持一个单个 HttpClient 对象处于活动状态,它是 designed for re-use。
HttpClient 没有做的,是在断开连接时返回缓存的结果。因此还有其他库,如 Akavache,它创建了一个离线键值存储。
【讨论】:
我不处理 HttpClient,我使用单例,但它仍然向 Web 服务器发出相同的请求(观察到 Fiddler)。为什么? 顺便说一句:您可以在 HttpClient 的 HttpBaseProtocolFilter 上设置缓存标志以仅从缓存中获取数据。它专为处理“无网络”情况而设计。 (但请始终记住,http 缓存不是数据库!系统很可能会决定从缓存中删除内容或从不将其添加到缓存中。你知道,原因)。以上是关于UWP 应用中的 HttpClient 缓存的主要内容,如果未能解决你的问题,请参考以下文章
详解 UWP (通用 Windows 平台) 中的两种 HttpClient API
带有json字符串的后台任务中的UWP Httpclient postasync
UWP HttpClient 存储 cookie 直到应用被卸载
HttpClient.SendAsync 在 Xamarin.Forms Android 上引发 ObjectDisposedException,但在 UWP 上却没有