簡體   English   中英

MvvmCross插件網絡和Cookie

[英]MvvmCross Plugin Network and Cookie

我想提出一個需要嵌入式cookie的休息請求。 我已經以這種方式使用System.Net參考來做到這一點

在PCL和MVVMCross上對System.net的引用

但是我在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; });

我收到此錯誤“未實現請求的功能”。

在/Developer/MonoTouch/Source/mono/mcs/class/System/System.Net/HttpWebRequest.cs:553在(包裝器遠程調用並檢查)系統的System.Net.HttpWebRequest.get_SupportsCookieContainer()[0x00000]中.Net.HttpWebRequest:get_SupportsCookieContainer()位於Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestClient.SetCookieContainer(Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestRequest restRequest,System.Net.HttpWebRequest httpRequest stuartlodge / Documents / GitHub / Mvx / MvvmCross / Plugins / Cirrious / Network / Cirrious.MvvmCross.Plugins.Network / Rest / MvxRestClient.cs:128在Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestClient.Build。 /Users/stuartlodge/Documents/GitHub/Mvx/MvvmCross/Plugins/Cirrious/Network/Cirrious.MvvmCross.Plugins.Network/Rest/MvxRestClient.cs:100處/Users/stuartlodge/Documents/Plugins.Network.Rest.MvxRestRequest restRequest)[0x00028] / Users / stuartlodge / Document中的MvvmCross.Plugins.Network.Rest.MvxRestClient + c__AnonStorey2。<> m__4()[0x0000d] s / GitHub / Mvx / MvvmCross / Plugins / Cirrious / Network / Cirrious.MvvmCross.Plugins.Network / Rest / MvxRestClient.cs:60 at Cirrious.MvvmCross.Plugins.Network.Rest.MvxRestClient.TryCatch(System.Action .Action`1 errorAction)/Users/stuartlodge/Documents/GitHub/Mvx/MvvmCross/Plugins/Cirrious/Network/Cirrious.MvvmCross.Plugins.Network/Rest/MvxRestClient.cs:20中的[0x00000]

那是在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);

Network插件的特定部分目前正在開發中-請參閱REST插件的GitHub Issue

cookie功能似乎無法在您正在測試的平台上運行(我從stacktrace中猜想是xamarin.ios)

在這種情況下,這可能歸因於Xamarin.iOS中的臨時問題-請參閱:


更一般而言,對於某個功能無法使用的插件開發,那么無論誰編寫該插件,都將不得不覆蓋該特定平台上的該功能,或者必須標記該功能在該平台上未實現。

請注意,將功能標記為未實現是完全正常的-某些平台上始終不會實現某些功能。

假設可以實現該功能,那么為網絡插件做出貢獻的人可能會:

如果這不是Xamarin.iOS的臨時問題,那么我希望有人很快會以這種方式添加cookie支持。 如果您希望盡快獲得支持,則:

  • 在GitHub問題上提問,為貢獻者提供一個用例(可能會優先考慮)
  • 自己貢獻代碼

如果使用此現有的Network插件太大了,那么可以從看一個簡單的插件開始-參見https://speakerdeck.com/cirrious/plugins-in-mvvmcross中更簡單的Vibrate示例


如果您不想弄亂插件,那么只需找到其他前進的方式-例如使用您自己的本機非PCL庫來實現該功能。


邊注:

該代碼實際上可以在Mac上的Xamarin Studio上正常運行。

正如我試圖在另一個問題中解釋的那樣,當前XS具有“偽造”的PCL支持-因此,內置在XS中的PCL只是普通的程序集, 不能移植。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM