首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CookieContainer灾祸

CookieContainer灾祸
EN

Stack Overflow用户
提问于 2015-04-09 08:29:37
回答 1查看 342关注 0票数 0

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

此代码的目的是将CookieContainer对象转换为HashTable,以便以后转换为CookieCollection。我得到这段代码的错误“无法找到变量'm_domainTable'”

代码语言:javascript
复制
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文件。我尝试使用下面建议的代码创建一个新项目,但我得到了错误"Object未设置为对象的实例“。

代码语言:javascript
复制
var cookieJar = new CookieContainer();
var table = (Hashtable)cookieJar.GetType()
        .GetField("m_domainTable", BindingFlags.NonPublic | BindingFlags.Instance)
        .GetValue(cookieJar);

所以我卡住了。以前,我已经展示了我的SendPost()方法,但是由于这个错误只涉及这些代码,所以我取出了该方法。如果您需要更多的代码,或者需要我测试任何东西,请告诉我,因为我很想让它正常工作。

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

代码语言:javascript
复制
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Collections;
using System.Web;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-09 08:49:10

嗯,您可以访问这个私有字段,比如

代码语言:javascript
复制
var table = (Hashtable)cookieJar.GetType()
                .GetField("m_domainTable", BindingFlags.NonPublic | BindingFlags.Instance)
                .GetValue(cookieJar);

更新

我在你最初的问题中漏掉了mono标签。但是,由于您的工作环境是Mono,而不是Microsoft,所以您可能看错了方向。

据我所见- m_domainTable哈希表只存在于微软的实现中,而不存在于Mono中。

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

代码语言:javascript
复制
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中运行,它输出:

代码语言:javascript
复制
System.Collections.Hashtable m_domainTable
Int32 m_maxCookieSize
Int32 m_maxCookies
Int32 m_maxCookiesPerDomain
Int32 m_count
System.String m_fqdnMyDomain

但是,如果您要在Ideone中运行它(我想它在那里运行Mono ),您将得到:

代码语言:javascript
复制
System.Int32 capacity
System.Int32 perDomainCapacity
System.Int32 maxCookieSize
System.Net.CookieCollection cookies

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29533534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档