5

UIWebViewまだネイティブに実装されていない領域のMonoTouchアプリケーションにを埋め込みたいです。

Webサイトで認証するために、現在のセッションのキーを含むCookieを設定したいと思います。

NSDictionaryCookieのプロパティを使用してを作成してから、新しいを作成しNSHttpCookieてに追加してみましたNSHttpCookieStorage.SharedStorage

残念ながら、Cookieは空であり、リクエストに使用されていないようです。

プロパティを使用してCookieを作成する方法の例と、これがこれを行う最も簡単な方法であるかどうかについてのコメントをいただければ幸いです。

4

5 に答える 5

7

Anujのバグレポートに続いて、Cookieを作成するために何行のコードが必要かについて気分が悪くなりました。したがって、次のMonoTouchバージョンには、の新しいコンストラクターがありますNSHttpCookie。これと同様に、次のSystem.Net.Cookieようなことができます。

// this ctor requires all mandatory parameters 
// so you don't have to guess them while coding
var cookie = new NSHttpCookie ("iherd", "ulikecookies", "/", "yodawg.com");

NSHttpCookie.NETからを作成することもできますSystem.Net.Cookie

注:APIが本来よりもはるかに複雑であることが判明した場合は、バグレポートに記入することを躊躇しないでください:-)

于 2012-02-23T16:25:40.960 に答える
3

Cookieとパラメータをサーバーに送信する必要がある場合は常に、RestSharpやHammockなどを使用して、response.Content値をUIWebViewのloadHtmlStringメソッドに渡します。

//setup cookies and params here
var response = client.Execute(req);
_webView = new UIWebView();
_webView.LoadHtmlString(response.Content, new NSUrl(baseUrl));

NSDictionaryAPIもかなり簡単です。

var props = new NSMutableDictionary ();
props.Add (NSHttpCookie.KeyOriginURL, new
NSString("http://yodawg.com"));
props.Add (NSHttpCookie.KeyName, new NSString("iherd"));
props.Add (NSHttpCookie.KeyValue, new NSString("ulikecookies"));
props.Add (NSHttpCookie.KeyPath, new NSString("/"));
于 2012-02-22T19:08:53.020 に答える
2

AFAIKすべてのアプリケーションには独自のCookieストレージがあるため、UIWebViewでページをレンダリングする前にこのコードを使用してみてください

        NSHttpCookie cookie = new NSHttpCookie()
        {
            Domain = "yourdomain.com",
            Name = "YourName",
            Value = "YourValue" //and any other info you need to set
        };
        NSHttpCookieStorage cookiejar = NSHttpCookieStorage.SharedStorage;
        cookiejar.SetCookie(cookie);

私は現在MACに参加していないので、テストできません。これがお役に立てば幸いです。


申し訳ありませんが、投稿する前にテストできませんでした。とにかく今夜まで家に帰らないので、これを試してみてください

var objects = new object[] { "http://yoururl.com", "CookieName", "CookieValue", "/" };
var keys = new object[] { "NSHTTPCookieOriginURL", "NSHTTPCookieName", "NSHTTPCookieValue", "NSHTTPCookiePath" };
NSDictionary properties = (NSDictionary) NSDictionary.FromObjectsAndKeys(objects, keys);
NSHttpCookie cookie = NSHttpCookie.CookieFromProperties(properties);
NSHttpCookieStorage.SharedStorage.SetCookie(cookie);

上で述べたように、それが機能しない場合は、モノタッチバインディングのバグである可能性があるため、これを行うことで手動でバインドできます

var objects = new object[] { "http://yoururl.com", "CookieName", "CookieValue", "/" };
var keys = new object[] { "NSHTTPCookieOriginURL", "NSHTTPCookieName", "NSHTTPCookieValue", "NSHTTPCookiePath" };
NSDictionary properties = (NSDictionary) NSDictionary.FromObjectsAndKeys(objects, keys);
NSHttpCookie cookie = (NSHttpCookie) Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr(new Class("NSHTTPCookie").Handle, new Selector("cookieWithProperties:").Handle, properties.Handle))
NSHttpCookieStorage.SharedStorage.SetCookie(cookie);

using MonoTouch.ObjCRuntime;手動でバインドする場合も含めることを忘れないでください

手動でバインドが機能する場合は、 https://bugzilla.xamarin.com/にバグレポートを投稿することを忘れないでください。

アレックス

于 2012-02-22T16:05:15.937 に答える
0

これを行うために、NSMutableURLRequest +XSURLRequestカテゴリとXSCookieクラスを作成しました;-) http://blog.peakji.com/cocoansurlrequest-with-cookies/

于 2012-02-23T01:59:01.603 に答える
0

これはあなたにリードを与えるかもしれません。以前、私は同様の戦略を使用して

サイトへのWebRequestを実行し、.Net /MonoCookieStoreに保存されているCookieを収集します。次に、UIWebViewにURLをロードするときに、それらのCookieをNSHttpCookieStorageにコピーしました。

public NSHttpCookieStorage _cookieStorage; 

    /// <summary>
    /// Convert the .NET cookie storage to the iOS NSHttpCookieStorage with Login Cookies
    /// </summary>
    void DotNetCookieStoreToNSHttpCookieStore()
    {
        foreach (Cookie c in _cookies.GetCookies(new Uri(UrlCollection["Login"], UriKind.Absolute))) {
            Console.WriteLine (c);
            _cookieStorage.SetCookie(new NSHttpCookie(c));
        }
    }
于 2015-04-01T14:11:58.597 に答える