gpt4 book ai didi

c# - UWP HttpClient 禁用 "If" header

转载 作者:可可西里 更新时间:2023-11-01 17:06:30 25 4
gpt4 key购买 nike

我在 UWP 和 HttpClient 中发现了一个有趣的特性(它也适用于 WebRequest):任何 Http 请求都会发送“If-*” header 。我确实试验过 UWP 和 WPF 应用程序。我向不支持“If-” header 的 Azure 文件存储发送了请求,如果将发送 header ,将返回错误 400。所以这是我的代码:

HttpClient client = new HttpClient();
var response = await client.GetAsync("LINK_TO_AZURE_FILE_STORAGE_IMAGE");

非常简单,两个应用程序相似。结果 - WPF 应用程序不发送“If-*” header ,而 UWP 会。所以这意味着我无法在 UWP 应用程序中使用文件存储,我只有错误 400。

我的问题是 - 我可以禁用这个 st...d 缓存吗?感谢您的关注

最佳答案

是的,在使用 HttpClient 时在 UWP 应用程序中,默认情况下它会自动使用本地 HTTP 缓存。第一次,您的代码应该可以工作。然后你会得到 400 Error 作为第一个响应,它包含缓存数据,所有后续请求将默认使用此缓存,如下所示:
enter image description here

要解决这个问题,我们可以使用 Windows.Web.Http.HttpClientHttpBaseProtocolFilter上课类和 HttpCacheControl禁用缓存的类,如下所示:

var filter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
filter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.MostRecent;
filter.CacheControl.WriteBehavior = Windows.Web.Http.Filters.HttpCacheWriteBehavior.NoCache;

var httpClient = new Windows.Web.Http.HttpClient(filter);

var response = await httpClient.GetAsync(new Uri("LINK_TO_AZURE_FILE_STORAGE_IMAGE"));

要使此方法起作用,我们需要确保没有本地 HTTP 缓存。作为HttpCacheReadBehavior.MostRecent表示如果可能,它仍将使用本地 HTTP 缓存。所以我们最好先卸载应用,不要在应用中使用HttpClient client = new HttpClient();

更新:

从 Windows Anniversary Update SDK 开始,HttpCacheReadBehavior 枚举中添加了一个新的枚举值 NoCache。通过结合使用 ReadBehaviorWriteBehavior,我们可以实现各种与缓存相关的行为。当我们不想使用本地缓存时,我们可以将 ReadBehavior 设置为 HttpCacheReadBehavior.NoCache ,例如:

var filter = new Windows.Web.Http.Filters.HttpBaseProtocolFilter();
filter.CacheControl.ReadBehavior = Windows.Web.Http.Filters.HttpCacheReadBehavior.NoCache;

var httpClient = new Windows.Web.Http.HttpClient(filter);

关于c# - UWP HttpClient 禁用 "If" header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39329647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com