Xamarin.ios 无法将cookie添加到NSHTTPookieStorage.SharedStorage

Xamarin.ios 无法将cookie添加到NSHTTPookieStorage.SharedStorage,xamarin.ios,Xamarin.ios,我正在使用Monotouch,并试图在模拟器的共享存储中存储一个NSHTTPookie对象,以用于我未来的请求。 我正在使用nshttpookie存储.SharedStorage.SetCookie(nshttpookie)方法 但是,执行此操作后,当我尝试检索Cookie(通过nshttpcookeStorage.SharedStorage.Cookie)时,我看到0个Cookie 更详细地说,我正在将系统cookie转换为NSHttpCookie。在那之后,我试着把这写下来 NSHttpCo

我正在使用Monotouch,并试图在模拟器的共享存储中存储一个NSHTTPookie对象,以用于我未来的请求。 我正在使用
nshttpookie存储.SharedStorage.SetCookie(nshttpookie)
方法

但是,执行此操作后,当我尝试检索Cookie(通过
nshttpcookeStorage.SharedStorage.Cookie
)时,我看到0个Cookie

更详细地说,我正在将系统cookie转换为NSHttpCookie。在那之后,我试着把这写下来

NSHttpCookieStorage.SharedStorage.AcceptPolicy = NSHttpCookieAcceptPolicy.Always;
NSHttpCookieStorage.SharedStorage.SetCookie (
                       convertSystemCookieToNsCookie(resp.Cookies[0]));  
当我试图用

NSHttpCookie[] cookies = NSHttpCookieStorage.SharedStorage.Cookies;
Console.Out.WriteLine ("Found cookies " + cookies.Length);
上面写着0饼干。 我没有看到任何例外。 这是convertSystemCookieToNsCookie方法-

private NSHttpCookie convertSystemCookieToNsCookie(Cookie cookie) {
        var properties = new NSMutableDictionary ();
        properties.Add (NSHttpCookie.KeyOriginURL, new NSString(cookie.Domain));
        properties.Add (NSHttpCookie.KeyName, new NSString(cookie.Name));
        properties.Add (NSHttpCookie.KeyValue, new NSString(cookie.Value));
        properties.Add (NSHttpCookie.KeyPath, new NSString (cookie.Path));
        NSDate cookieDate = NSDate.FromTimeIntervalSinceReferenceDate ((
            cookie.Expires - (new DateTime (2001, 1, 1, 0, 0, 0))).TotalSeconds);
        properties.Add (NSHttpCookie.KeyExpires, cookieDate);
        return new NSHttpCookie (properties);
    }
知道我做错了什么吗?
多谢

NSHttpCookie
具有接受.NET
System.NET.Cookie
实例的属性,该实例可用于避免类似于
convertsystemCookietoncookie
的代码


可能发生的情况是,从
NSMutableDictionary
创建
NSHttpCookie
时出错,将返回一个空句柄(
IntPtr.Zero
),该句柄不会添加到共享存储中。添加helper.ctor是为了避免此类问题。

什么是
ConvertSystemCookietOnCookie
?你自己的代码?我们能看到吗?用我的方法更新了代码。谢谢可能不相关,但您是否尝试了接受
Cookie
实例的
NSHttpCookie
构造函数?哇!成功了。谢谢你,波波!太好了:)我把它作为一个答案加上去,这样(对其他人)会更容易找到。感谢您确认.poupou,这是现在的另一个问题-通过这种方式,cookie不会在我的模拟器上持久存在。我正在编写cookie,并且可以在该特定运行的设备上找到它。但是,当我“停止”应用程序,重建并运行它时,它无法再次找到cookie。这是预期的行为吗?再次感谢!好的,我想我在你指出的构造函数中发现了一个bug。它从cookie中删除“expired”字段,并且它创建的NSHttpCookie是会话cookie(而System.Net.cookie对象有一个expires日期)。代码在那里-但是苹果的NSHttpCookie将在会话cookie上为
expiresDate
返回null,参考:嗯,服务器发送的cookie肯定不是会话cookie-cookie。Discard为False,cookie.Expires为有效日期。你确定构造器没有问题吗?代码在那里,因此应该将它提供给
NSHttpCookie
,我知道它可能无法返回的一个原因(可能还有其他原因或某个错误)。你能创建一个测试用例并提交一个bug报告吗?