CookieContainer事故

时间:2015-04-09 08:29:37

标签: c# mono

为了更好的可读性,我编辑了这个。这也是一个不同的question

此代码的目的是将CookieContainer对象转换为HashTable,以便以后转换为CookieCollection。我为此代码

收到错误“无法找到变量'm_domainTable'”
var cookieJar = new CookieContainer();
cookieJar.Add(new Uri("http://someuri.com"), new Cookie("name", "value", "/path/", ".domain"));
var table = (Hashtable) cookieJar.GetType().InvokeMember("m_domainTable",
            BindingFlags.NonPublic |
            BindingFlags.GetField |
            BindingFlags.Instance,
            null,
            cookieJar,
            new object[] {});

即使使用此hack,目的也是为了能够遍历本地存储的cookie文件。我尝试使用下面建议的代码创建一个新项目但我得到错误“对象未设置为对象的实例”。

var cookieJar = new CookieContainer();
var table = (Hashtable)cookieJar.GetType()
        .GetField("m_domainTable", BindingFlags.NonPublic | BindingFlags.Instance)
        .GetValue(cookieJar);

所以我被卡住了。以前我已经展示了我的SendPost()方法,但由于这个错误只涉及这些代码,我拿出了那个方法。如果您需要更多代码或需要我测试任何东西,请告诉我,因为我希望能够使用它。

我的环境设置是使用Mono / .Net 4.5使用这些程序集的MonoDevelop:

using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Collections;
using System.Web;

1 个答案:

答案 0 :(得分:1)

好吧,您可以像

一样访问此私有字段
var table = (Hashtable)cookieJar.GetType()
                .GetField("m_domainTable", BindingFlags.NonPublic | BindingFlags.Instance)
                .GetValue(cookieJar);

<强>更新

我在原始问题中遗漏了mono标记。但由于您的工作环境是Mono,而不是Microsoft CLR,因此您可能会以错误的方式查看。

据我所知 - m_domainTable哈希表只存在于Microsoft实现中,但不存在于Mono中。

可以通过简单的测试代码证明:

var cookieJar = new CookieContainer();
var type = cookieJar.GetType();
var fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

foreach (var field in fields)
    Console.WriteLine(field.ToString());

然后在Microsoft CLR中运行,它输出:

System.Collections.Hashtable m_domainTable
Int32 m_maxCookieSize
Int32 m_maxCookies
Int32 m_maxCookiesPerDomain
Int32 m_count
System.String m_fqdnMyDomain

但是如果你在Ideone中运行它(我想它在那里运行Mono),你就会得到:

System.Int32 capacity
System.Int32 perDomainCapacity
System.Int32 maxCookieSize
System.Net.CookieCollection cookies

看看这里:System.Net.CookieCollection cookies - 这似乎是你需要的领域......