如何将Cookie添加到WebRequest?

O.O*_*O.O 30 .net c# unit-testing

我试图对一些代码进行单元测试,我需要替换它:

  HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create( uri );
  httpWebRequest.CookieContainer = new CookieContainer();
Run Code Online (Sandbox Code Playgroud)

  WebRequest webRequest = WebRequest.Create( uri );
  webRequest.CookieContainer = new CookieContainer(); 
Run Code Online (Sandbox Code Playgroud)

基本上,如何在不使用HttpWebRequest的情况下将cookie添加到请求中?

dle*_*lev 34

根据您的意见,您可以考虑编写扩展方法:

public static bool TryAddCookie(this WebRequest webRequest, Cookie cookie)
{
    HttpWebRequest httpRequest = webRequest as HttpWebRequest;
    if (httpRequest == null)
    {
        return false;
    }

    if (httpRequest.CookieContainer == null)
    {
        httpRequest.CookieContainer = new CookieContainer();
    }

    httpRequest.CookieContainer.Add(cookie);
    return true;
}
Run Code Online (Sandbox Code Playgroud)

然后你可以有如下代码:

WebRequest webRequest = WebRequest.Create( uri );
webRequest.TryAddCookie(new Cookie("someName","someValue"));
Run Code Online (Sandbox Code Playgroud)

  • 此代码返回:"参数"{0}"不能为空字符串." 在线httpRequest.CookieContainer.Add(cookie);. 任何的想法? (3认同)
  • 我有同样的问题"参数'{0}'不能是空字符串." 正如dlev所说,这是因为没有包含域名.但是我在开发期间运行localhost上的所有内容(http:// localhost:50665 /).因此,对于名为'cookie'的Cookie对象,我添加了一个域'localhost'并修复了它.正确的语句读取cookie.Domain ="localhost".请注意,我之前尝试过cookie.Domain ="localhost:50665"并且没有用,我也尝试了cookie.Domain ="http:// localhost:50665",但这也无效.你只需要使用"localhost".希望这有助于下一个人. (3认同)
  • @drdigit那是因为您没有创建包含域名的cookie.另外,我很确定错误字符串是BCL中的一个错误(遗憾的是,它似乎一直存在于4.5中) (2认同)

Hat*_*oft 6

尝试这样的事情:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.contoso.com/default.html");
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(new Cookie("ConstoCookie", "Chocolate Flavour"));
Run Code Online (Sandbox Code Playgroud)

  • 这将引发错误“对象引用未设置为...”。首先我们可能需要 `request.CookieContainer = new CookieContainer();` 然后调用 Add 方法应该可以工作。 (3认同)

小智 6

WebRequest是一个没有CookieContainer属性的抽象类.此外,您不能使用Headers集合(未实现的异常),因此任何类似webRequest.Headers.Add("Cookie","...")的尝试都将失败.

抱歉,您没有机会在WebRequest中使用Cookie.

坚持使用HttpWebRequest并使用其Headers集合添加/编辑您喜欢的多个Cookie!