【问题标题】:Sending a cookie with a POST from a .NET client to a REST API [duplicate]将带有 POST 的 cookie 从 .NET 客户端发送到 REST API [重复]
【发布时间】:2015-04-04 11:21:45
【问题描述】:

我正在尝试将我的 .net 客户端 api 请求上的 cookie 发布到远程服务器。

使用 Fiddler,我可以看到我需要的 cookie 如下所示:

请求发送265字节的Cookie数据:

cookiesDirective=1; __utmt=1; currentLanguage=EN; 
__utma=198151921.81872271.1398032350.1423043623.1423075781.3; 
__utmb=198151921.3.10.1423075781; 
__utmc=198151921; 
__utmz=198151921.1423043623.2.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)

但是,当我发布我的 api 调用时,我的 cookie 容器是空的(根据 Fiddler)

我的代码如下:

static async Task RunAsync()
{

    string url = "http://www.myserver.com/Services/GetData";

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("http://localhost:9000/");
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

        var model = new Payload() { pageNumber = 2 };

        var cookie = new CookieHeaderValue("session-id", "12345");
        cookie.Expires = DateTimeOffset.Now.AddDays(1);
        cookie.Path = "/";

        HttpResponseMessage response = new HttpResponseMessage();

        response.Headers.AddCookies(new CookieHeaderValue[] { cookie });

        response = await client.PostAsJsonAsync(url, model);
        if (response.IsSuccessStatusCode)
        {
             // Testing
        }

    }
}

【问题讨论】:

  • 还可以考虑在与 REST 服务通信时使用 RestSharp (restsharp.org)..
  • response 对象上设置 cookie 对您没有多大用处,它是管理服务器发送给您的内容的对象。您需要在实际发送 request 的对象上设置 cookie,在您的代码中将是 client。请参阅@mikey 提供的链接,了解如何执行此操作。

标签: c# asp.net asp.net-web-api


【解决方案1】:

感谢@mikey,我得到了以下工作:

    string url = "http://www.myserver.com/Services/GetData";

    var baseAddress = new Uri(url);
    using (var handler = new HttpClientHandler { UseCookies = false })
    using (var client = new HttpClient(handler) { BaseAddress = baseAddress })
    {
        var message = new HttpRequestMessage(HttpMethod.Post, "/Services/ContentRetrievalService.svc/GetSpecAmountOfFilteredPepole");
        message.Headers.Add("Cookie", "cookiesDirective=1; __utmt=1; currentLanguage=EN; __utma=198151921.81872271.1398032350.1423043623.1423075781.3; __utmb=198151921.3.10.1423075781; __utmc=198151921; __utmz=198151921.1423043623.2.1.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)");

        message.Headers.Add("Connection", "keep-alive");
        message.Headers.Add("X-Requested-With", "XMLHttpRequest");
        message.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.93 Safari/537.36");
        message.Headers.Add("Accept-Encoding", "gzip, deflate");

        var result = await client.SendAsync(message);
        result.EnsureSuccessStatusCode();
    }

【讨论】:

  • 你救了我的命!谢谢!!
猜你喜欢
  • 2015-04-06
  • 2017-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-07
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多