1

我正在尝试从 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正确地导致谷歌返回304 - not modified,所以我没有得到任何 json 文件。问题是我没有添加该标题,我也无法弄清楚它被添加到哪里以及如何停止它。

是否存在可以预料到这种情况的情况,如果是,如何控制这种行为。

4

1 回答 1

1

这一定是在带有.NET CoreWindows 10System.Net.Http.HttpClient之上的副作用。控制台应用程序仍然使用常规的.NET FrameworkWindows.Web.Http.HttpClient

由于无法使用 UWP 应用程序来控制缓存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();

确保卸载并重新安装您的应用程序以清理 Internet 缓存。

于 2015-12-28T22:00:55.017 回答