我试图从Windows通用应用程序发出一个Http Get请求并看到一个奇怪的行为。 (不确定它是否是一个通用应用程序的事实是否相关)。
有问题的简化代码是:
var client = new HttpClient();
var response = await client.GetAsync("https://storage.googleapis.com/pictureframe/settings.json");
var s = await response.Content.ReadAsStringAsync();
在按预期工作的单元测试或控制台应用程序中,变量s
包含json内容。
然而,在我尝试添加该代码的应用程序(针对Windows 10内部版本10240的通用Windows应用程序)中,原始http请求如下所示:
GET https://storage.googleapis.com/pictureframe/settings.json HTTP/1.1
Host: storage.googleapis.com
If-Modified-Since: Sun, 27 Dec 2015 18:00:08 GMT
If-None-Match: "5c43f7f07270bda3b7273f1ea1d6eaf7"
Connection: Keep-Alive
If-Modified-Since
标题正确导致Google返回304 - not modified
,因此我没有收到任何json文件。问题是我没有添加标题,也无法弄清楚它的添加位置以及如何停止它。
是否存在预期的情况,如果有,则如何控制该行为。
答案 0 :(得分:1)
这必须是System.Net.Http.HttpClient
使用 .NET Core 在 Windows 10 上Windows.Web.Http.HttpClient
之上的副作用。控制台应用仍然使用常规的 .NET Framework 。
由于无法使用System.Net.Http.HttpClient/HttpClientHandler
来控制缓存,并且System.Net.Http.WebRequestHandler
无法用于UWP应用,因此我建议您切换到Windows.Web.Http
。
然后尝试:
var filter = new HttpBaseProtocolFilter();
// Disable cache of responses.
filter.CacheControl.WriteBehavior = HttpCacheWriteBehavior.NoCache;
// Pass filter to HttpClient constructor.
var client = new HttpClient(filter);
var response = await client.GetAsync(new Uri("http://example.com"));
var responseString = await response.Content.ReadAsStringAsync();
请务必卸载并重新安装您的应用以清理互联网缓存。