Windows Runtime 禁用 HTTP 请求的硬盘缓存

豆奶直播换上了新的自制的 FLV 分离器,没错,我又造了一个新轮子。(原来是用的 FFMpeg)

斗鱼的高清直播流是直接 HTTP 流式传输 FLV,所以就简单的用 Windows.Web.Http.HttpClient (MSDN) 来下载数据了。于是新问题是我突然发现 App 一直在向硬盘写入文件,用资源管理器一看原来是 WinINet 正在把 FLV 文件缓存到硬盘里。

这个行为当然是不需要的,于是稍微研究了一下该如何禁用。.NET Framework 时代的 WebRequest.CachePolicy (MSDN) 是不存在的,需要改用以下的代码。

1
2
3
4
var filter = new HttpBaseProtocolFilter();
filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;

var client = new HttpClient(filter);

这个 HttpBaseProtocolFilter (MSDN) 实现了 IFilter (MSDN) 接口,这是 Windows Runtime 新的 HttpClient 所用的过滤器,和 PCL 里的 System.Net.Http.HttpClientHandler (MSDN) 差不多功能吧。

最后我写 blog 一直用的 Visual Studio,结果 Microsoft 的 Web Essentials 扩展提供的 Markdown 高亮真是各种瞎,遇到 < 也不能正确识别,链接的 [] 里再放 () 也不能。

然后 Markdown 遇到链接里有 () 的就直接选择死亡了,也不能强制不转义 Markdown 语法,这谁设计的破玩意。Hexo 还说支持 Github 版本的代码块,我在 ``` 后面放上 C# 标识,别说高亮了连行号都爆炸了。

今天的水就到这里。