C# 命名空间System.Net.Cache不存在
为了调用我的Http REST API,我将命名空间System.Net.Http命名空间与Xamarin一起使用,它工作正常。我的http客户端代码驻留在common portable项目中,我从我的android only项目调用它(iOS仍在积压中) 下面是它的样子: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
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
。