【问题标题】:Microsoft HTTP Client Libraries - CookieContainer will never be usedMicrosoft HTTP 客户端库 - 永远不会使用 CookieContainer
【发布时间】:2013-10-15 13:02:26
【问题描述】:

我已经搜索了一段时间,但无法找到解决方案。

我目前正在开发一个 Windows Phone 应用程序(针对 7.1)。为了与 Internet 通信,我使用 NuGet 包:Microsoft.Net.Http

以下代码用于与网络服务器通信:

CookieContainer container = new CookieContainer();

HttpClientHandler handler = new HttpClientHandler();
handler.UseCookies = true;
handler.CookieContainer = container;
HttpClient client = new HttpClient(handler);

Uri myUri = new Uri("http://my-server/ajax/login?action=login&name=user&password=passwd");

var task = client.GetStringAsync(myUri);

task.Wait();

String result = task.Result;

这个 GET 请求的结果和预期的一样。我还检查了服务器端。登录过程成功,并且向客户端返回了一个有效的 JSESSIONID。

为了验证我的问题,我创建了一个简单的控制台应用程序,其代码与上述完全相同(从我的 WP 解决方案复制并粘贴到 CL 解决方案(以及上述相应的 NuGetPackage)。

现在有一个很大的不同。 我设置了一些断点来查看变量:

在 Windows Phone 上:

? container
{System.Net.CookieContainer}
    Capacity: 300
    Count: 0
    MaxCookieSize: 4096
    PerDomainCapacity: 20

在我的控制台应用程序中:

? container
{System.Net.CookieContainer}
    Capacity: 300
    Count: 3
    MaxCookieSize: 4096
    PerDomainCapacity: 20

我真的不知道那里发生了什么...... 有人说可能是 Cookie 被标记为安全。我已经检查过了,但事实并非如此。由于代码可在 CLI 应用程序上运行,因此可以确保到目前为止请求已正确完成。

有人知道那里发生了什么吗?

【问题讨论】:

    标签: c# visual-studio-2012 windows-phone nuget-package portable-class-library


    【解决方案1】:

    我刚刚发现了我的问题。也许其他人需要这些信息,所以我发布了解决方案。

    我的远程服务器配置为将此 cookie 作为 httpOnly cookie 发送。 由于这个事实,我的 cookie 在 CookieContainer 对象中是不可见的,即使它们存在。

    唯一奇怪的是,如果我的代码(或 PCL)在控制台应用程序中使用,cookie 会暴露给 CookieContainers 公共对象。在 WinRT 或 Windows Phone 应用程序中,它们不会公开。 似乎 RT 和 WP 更加封闭。

    更改我的服务器配置以将 cookie 发送为 HttpOnly=false 让我在客户端查看 cookie。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-07
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多