C# UWP HttpClient禁用“;如果;标题

C# UWP HttpClient禁用“;如果;标题,c#,http,uwp,C#,Http,Uwp,我在UWP和HttpClient中发现了一个有趣的特性(它也适用于WebRequest): 任何Http请求都会发送“If-*”头。我做了UWP和WPF应用程序的实验。我向Azure文件存储发送了请求,该文件存储不支持“If-”头,如果发送头,将返回错误400。这是我的代码: HttpClient client = new HttpClient(); var response = await client.GetAsync("LINK_TO_AZURE_FILE_STORAGE_IMAGE");

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

HttpClient client = new HttpClient();
var response = await client.GetAsync("LINK_TO_AZURE_FILE_STORAGE_IMAGE");  
非常简单,两个应用程序的情况类似。结果-WPF应用程序不发送“If-*”头,UWP发送。这意味着我不能在UWP应用程序中使用文件存储,我只有错误400

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

您是否尝试过使用该类属性的方法?

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

要解决此问题,我们可以使用class with class和class禁用缓存,如下所示:

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缓存。如有可能,它仍将使用本地HTTP缓存。所以我们最好先卸载应用程序,不要使用
HttpClient=newhttpclient()在应用程序中

更新:

从Windows周年更新SDK开始,有一个新的枚举值NoCache添加到
HttpCacheReadBehavior
枚举中。通过组合使用
ReadBehavior
WriteBehavior
,我们可以实现各种与缓存相关的行为。当我们不想使用本地缓存时,我们可以将
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);

是的,什么也帮不了我。这是在buildWow之后添加的标题!非常感谢!也许你知道-这是功能还是bug?因为在图像控制中,我们无法访问Http。将URI发送到Image.Source不是一个好主意,但可能有人需要该功能,并且会遇到问题…我认为这是UWP中的一个功能,自从Windows周年更新SDK以来,HttpCacheReadBehavior枚举中添加了一个新的枚举值“NoCache”。有关详细信息,请参阅。