2016-04-23 7 views
1

だからこんにちは。Xamarin.FormsポータブルプロジェクトでSystem.Collectionsを使用する方法

私はの.NET FrameworkCookieContainerクラスに問題があります。 CookieContainerの中にクッキーがあると、クッキーはgetCookiesで取得できません。私は自分のドメインのような多くのサブドメインがあるため、問題は、CookieContainerクラスのメソッドgetCookies()にあると思う:その場合、

this.has.lots.of.subdomains.com

いけない知っているがバグ、または私が間違って何かをしている場合、私はすべてのクッキーを取得して、私が得たすべてのクッキーを介して を繰り返して検索することでこの問題を回避することに決めました(ほとんど2 - 3クッキーです。かなり大きな問題です。)

私がstackoverflowで見つけた方法は、この1つです:

public static CookieCollection GetAllCookies(this CookieContainer cookieJar) 
    { 
     CookieCollection cookieCollection = new CookieCollection(); 

     Hashtable table = (Hashtable)cookieJar.GetType().InvokeMember("m_domainTable", 
                     BindingFlags.NonPublic | 
                     BindingFlags.GetField | 
                     BindingFlags.Instance, 
                     null, 
                     cookieJar, 
                     new object[] { }); 

     foreach (var tableKey in table.Keys) 
     { 
      String str_tableKey = (string)tableKey; 
      if (str_tableKey[0] == '.') 
      { 
       str_tableKey = str_tableKey.Substring(1); 
      } 

      SortedList list = (SortedList)table[tableKey].GetType().InvokeMember("m_list", 
                     BindingFlags.NonPublic | 
                     BindingFlags.GetField | 
                     BindingFlags.Instance, 
                     null, 
                     table[tableKey], 
                     new object[] { }); 

      foreach (var listKey in list.Keys) 
      { 
       String url = "https://" + str_tableKey + (string)listKey; 
       cookieCollection.Add(cookieJar.GetCookies(new Uri(url))); 
      } 
     } 

     return cookieCollection; 
    } 

Unfortuneatlyは、この回避策はI'amはXamarin.Formsポータブルプロジェクトに取り組んでいるので、私はにSystem.Collections名前空間、からHashtableのように、使用傾けるいくつかのクラスを使用しています。

私は、にSystem.Collections名前空間を含めるように見えるのMicrosoft基本クラスライブラリと呼ばれるパッケージがあること、が分かったそれでも私のポータブルプロジェクトでそれをインストールした後、私はにSystem.Collectionsパッケージを使用傾けます。

何か不足していますか、何か誤解しましたか?あなたが知っているなら、どのように私はこれらのクラスを使用することができます、私が何をする必要があるか正確に教えてください。

答えて

2

PCLベースSystem.Collectionある行方不明非ジェネリックコレクションの大半とHashtableが欠落しているクラスの1つです。

Hashtableは、すべてのPCLのプロファイルと共有Hashtableなどの主要なメソッドとプロパティ全体で利用可能である、それはIDictionaryを実装して非ジェネリック辞書であり、機能にDictionary<object, object>に従います。

HashtableインスタンスをDictionary<TKey, TValue>インスタンスに置き換えて静的にCookieを入力するか、実際に入力を気にしない場合はDictionary<object, object>と入力してください。

+0

ありがとう、私はそれを試みます。 SortedListを置き換えるにはどうすればいいですか?PCLにもないからです。 –

+1

あなたのニーズに応じて、( 'System.Collection.Generic')' SortedDictionary'または 'SortedSet'はあなたの' SortedList'を置き換えることができるはずです – SushiHangover

+0

あなたはこの回答を見た:http://stackoverflow.com/a/ 30080722/4984832 – SushiHangover

関連する問題