UWP HttpClient禁用"如果"头

时间:2016-09-05 11:29:43

标签: c# http uwp

我在UWP和HttpClient中找到了一个有趣的功能(它也适用于WebRequest): 任何Http请求发送" If - *"头。我尝试过UWP和WPF应用程序。我向Azure文件存储发送了请求,该文件存储不支持"如果 - "标题,如果标题将被发送,将返回错误400。所以这是我的代码:

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

非常简单,类似于两个应用程序。结果 - WPF应用程序无法发送"如果 - *"标题,UWP。所以这意味着我无法在UWP应用程序中使用文件存储,我只有错误400.

我的问题是 - 我可以禁用此缓存吗?谢谢你的关注

2 个答案:

答案 0 :(得分:2)

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

要解决此问题,我们可以使用Windows.Web.Http.HttpClient类和HttpBaseProtocolFilter类以及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周年更新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);

答案 1 :(得分:0)

您是否尝试过使用Remove类的DefaultRequestHeaders属性的HttpClient方法?