我使用命名空间System.Net.Http命名空间和Xamarin来调用我的HTTP REST API,它工作正常。我的http客户端代码驻留在常见的可移植项目中,我从我的android-only项目调用它(iOS仍在积压中)
下面是它的样子:
Uri apiUri = new Uri("/example");
var request = (HttpWebRequest)HttpWebRequest.Create(apiUri);
request.ContentType = "application/json";
request.Method = "GET";
WebResponse response = await request.GetResponseAsync();
但是,我怀疑是否缓存了对同一URL的连续GET。 我已经看到可以通过HttpRequestCachePolicy对象删除缓存,如https://developer.xamarin.com/api/type/System.Net.Cache.HttpRequestCachePolicy/中所述。然后我应该看起来像:
Uri apiUri = new Uri("/example");
var request = (HttpWebRequest)HttpWebRequest.Create(apiUri);
request.ContentType = "application/json";
request.Method = "GET";
HttpRequestCachePolicy noCachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.NoCacheNoStore);
request.CachePolicy = noCachePolicy;
WebResponse response = await request.GetResponseAsync();
但是,命名空间System.Net.Cache没有在任何地方定义,我不能使用此方法。 我使用的是.NET SDK 4.5。
我缺少一些设置吗?或者我应该寻找一种不同的方法来禁用GET请求缓存?
以下是我得到的错误:
The type or namespace name 'Cache' does not exist in the namespace 'System.Net' (are you missing an assembly reference?)
答案 0 :(得分:1)
无论什么是触及HTTP API的最佳方式(WebClient与HttpClient vs. HttpWebRequest),来自@ShushiHangover的评论有助于我们弄清楚我的问题。
PCL输出格式曾经是Xamarin“便携式”项目的标准。但是,命名空间System.Net.Cache
在PCL库中不可用。
它在.NET Standard 2.0中可用,它本身在PCL中不可用。 PCL在2017年夏季已被弃用,支持.NET标准库,允许访问.NET Standard 2.0(以及其他好处)。
然而,无法将项目从PCL“转换”为.NET标准库,而是创建新项目并移动所有文件。 因此,我决定创建一个仅包含HTTP客户端代码的新.NET标准库项目。