Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 命名空间System.Net.Cache不存在_C#_Xamarin_Xamarin.android - Fatal编程技术网

C# 命名空间System.Net.Cache不存在

C# 命名空间System.Net.Cache不存在,c#,xamarin,xamarin.android,C#,Xamarin,Xamarin.android,为了调用我的Http REST API,我将命名空间System.Net.Http命名空间与Xamarin一起使用,它工作正常。我的http客户端代码驻留在common portable项目中,我从我的android only项目调用它(iOS仍在积压中) 下面是它的样子: Uri apiUri = new Uri("/example"); var request = (HttpWebRequest)HttpWebRequest.Create(apiUri); request.ContentTy

为了调用我的Http REST API,我将命名空间System.Net.Http命名空间与Xamarin一起使用,它工作正常。我的http客户端代码驻留在common portable项目中,我从我的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的连续访问会被缓存。 我已经看到可以通过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没有在任何地方定义,因此我无法使用此方法。 我正在使用.NETSDK4.5

是否有一些设置我丢失了?或者我应该寻找一种不同的方法来禁用GET请求缓存吗

下面是我得到的错误:

The type or namespace name 'Cache' does not exist in the namespace 'System.Net' (are you missing an assembly reference?)

不管使用HTTP API的最佳方式是什么(WebClient vs.HttpClient vs.HttpWebRequest),来自@ShushiHangover的评论都有助于我们理解我的问题

PCL输出格式曾经是Xamarin“可移植”项目的标准格式。但是,名称空间
System.Net.Cache
在PCL库中不可用。 它在中可用,而它本身在PCL中不可用。PCL在2017年夏天被弃用,取而代之的是.NET标准库,它允许访问.NET标准2.0(以及其他好处)

但是,除了创建一个新项目并移动所有文件之外,没有办法将项目从PCL“转换”到.NET标准库。
因此,我决定创建一个新的.NET标准库项目,该项目只包含我的HTTP客户端代码。

您是否在使用
AndroidClientHandler
作为
HttpClient
?对于
System.Net.Cache
,请在项目中添加对
System.Net
的引用。我仅使用HttpClientOnly,因为我的所有客户端都位于公共项目中。因此,如果存在平台无关的解决方案,我更喜欢它。尽管如此,我还是会检查您提到的
AndroidClientHandler
谢谢!您可以在
Xamarin.Android
项目选项中设置
AndroidClientHandler
作为构建选项(在Android构建/HttpClient实现下)。顺便说一下,我现在直接使用HttpWebRequest(我更新了我的问题)。看起来你建议我改用HttpClient。你有使用WebClient+AndroidClientHandler的直接示例代码的链接吗?我个人使用的是
HttpClient
而不是
HttpWebRequest
,有很多关于“为什么”的问答和博客帖子。Android(7.1)添加了原生TLS1.2(通过谷歌的BoringSSL)作为
HttpWebRequest
(仍列为
实验性
)的构建选项,因此至少安全性不像以前那样令人担忧。对于
WebClient
,没有与之相当的
AndroidClientHandler
。我假设你的“公共项目”是基于PCL的?如果转换为NetStandard2.0,则可以访问
RequestCachePolicy
,并使用
RequestCacheLevel.NoCacheNoStore
创建一个,并将其应用于
WebClient.CachePolicy