我要做一个需要嵌入式cookie的休息请求。我这样使用System.Net引用
Reference to System.net on PCL and MVVMCross
但是我在VS2012上移植那个PCL库(System.Net)时遇到了问题。该代码在Mac上的Xamarin Studio上运行良好。
提到这个问题我试图以这种方式使用MVVMCross的网络插件:
var url = "http://api.myaddress.com/api";
var json = new Cirrious.MvvmCross.Plugins.Json.MvxJsonConverter();
var client = new Cirrious.MvvmCross.Plugins.Network.Rest.MvxJsonRestClient
{
JsonConverterProvider = () => json
};
var request = new MvxRestRequest(url);
MvxDecodedRestResponse<SearchItem> theResponse = null;
Exception exception = null;
CookieCollection cc = new CookieCollection ();
cc.Add(new Cookie("mycookiename","mycookievalue","/","api.myaddress.com"));
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cc);
client.MakeRequestFor<SearchItem>(request,
(result) => { theResponse = result; },
(error) => { exception = error; });
我发现此错误“请求的功能未实现。”
at /Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:553中的System.Net.HttpWebRequest.get_SupportsCookieContainer()[0x00000] at(wrapper remoting-invoke-with-check)System.Net.HttpWebRequest:get_SupportsCookieContainer() 在/ Users / stuartlodge / Documents / GitHub / Mvx /中的Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestClient.SetCookieContainer(Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestRequest restRequest,System.Net.HttpWebRequest httpRequest)[0x00000] MvvmCross /插件/ Cirrious /网络/ Cirrious.MvvmCross.Plugins.Network /休息/ MvxRestClient.cs:128 位于/ Users / stuartlodge / Documents / GitHub / Mvx / MvvmCross / Plugins / Cirrious / Network的Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestClient.BuildHttpRequest /Cirrious.MvvmCross.Plugins.Network/Rest/MvxRestClient.cs:100 在Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestClient + c__AnonStorey2。&lt;&gt; m__4()[0x0000d] in /Users/stuartlodge/Documents/GitHub/Mvx/MvvmCross/Plugins/Cirrious/Network/Cirrious.MvvmCross.Plugins 。网络/休息/ MvxRestClient.cs:60 在Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestClient.TryCatch(System.Action toTry,System.Action`1 errorAction)[0x00000] / Users / stuartlodge / Documents / GitHub / Mvx / MvvmCross / Plugins / Cirrious / Network / Cirrious.MvvmCross.Plugins.Network/Rest/MvxRestClient.cs:20
这是适用于Mac的代码,我想使用MvvMCross网络插件移植
HttpWebRequest request = WebRequest.Create("http://api.myaddress.com/api") as HttpWebRequest;
request.Method = "GET";
request.Accept = "application/json";
request.Headers.Add(HttpRequestHeader.Cookie, "mycookievalue");
// Get response
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse) {
// Get the response stream
StreamReader reader = new StreamReader (response.GetResponseStream());
content = reader.ReadToEnd();
}
SearchItem itemssr = jsonConvert.DeserializeObject<SearchItem>(content);
答案 0 :(得分:1)
网络插件的特定部分目前正在开发中 - 请参阅GitHub Issue for REST plugin
看起来Cookie功能无法在您正在测试的平台上运行(我猜测它来自堆栈跟踪是xamarin.ios)
在这种情况下,这可能是Xamarin.iOS中的临时问题 - 请参阅:
更常见的是,对于插件开发,功能不起作用,然后编写插件的任何人都必须覆盖该特定平台上的该功能,或者必须在该平台上标记该功能未实现。
请注意,将功能标记为未实现是完全正常的 - 总会有些东西在某些平台上无法实现。
假设可以实现该功能,那么无论谁为网络插件做出贡献,都可以:
如果这不是一个临时的Xamarin.iOS问题,那么我希望有人会在不久的某个时候以这种方式添加cookie支持。如果您希望尽早获得支持,那么:
如果使用这个现有的网络插件是一个太大的初步飞跃,那么可以从查看更简单的插件开始 - 请参阅https://speakerdeck.com/cirrious/plugins-in-mvvmcross
中更简单的Vibrate示例如果你不想搞乱插件,那么就找一些其他的前进方式 - 例如使用您自己的原生非PCL库来实现该部分功能。
旁注:
该代码在Mac上的Xamarin Studio上运行正常。
正如我在另一个问题中尝试解释的那样,目前XS具有“假”PCL支持 - 因此内置XS的PCL只是普通的程序集,并且不可移植。