c# - 从 httpwebrequest 切换到 httpclient,我不知道如何发送我的 header ?

标签 c# .net windows-runtime httpclient

所以,这是我使用的代码



    string URL = "http://www.test.com/posts/.json";
    var getInfo = (HttpWebRequest)HttpWebRequest.Create(URL);{
    getInfo.Headers["Cookie"] = CookieHeader;
    getInfo.ContentType = "application/x-www-form-urlencoded";
    using (WebResponse postStream = await getInfo.GetResponseAsync())
    {
        StreamReader reader = new StreamReader(postStream.GetResponseStream());
        string str = reader.ReadToEnd();
    }

我想切换到 httpclient,我已经开始工作了,只是它不传递 Cookie 信息。我得到了信息,但只是匿名信息。不是我发送给用户的信息。这是我目前拥有的。



    HttpClient client = new HttpClient();
    client.DefaultRequestHeaders.Accept.Add(
    new MediaTypeWithQualityHeaderValue("application/json"));
    client.BaseAddress = new Uri("http://www.test.com/");
    client.DefaultRequestHeaders.Add("Cookie", CookieHeader);
    HttpResponseMessage response = await client.GetAsync("http://www.test.com" + URL);
    string str;
    str = await response.Content.ReadAsStringAsync();

最佳答案

您需要使用 HttpClientHandler,将 cookie 添加到其中,然后将其传递给 HttpClient 的构造函数。

一个例子:

    Uri baseUri = new Uri("http://www.test.com/");
    HttpClientHandler clientHandler = new HttpClientHandler();
    clientHandler.CookieContainer.Add(baseUri, new Cookie("name", "value"));
    HttpClient client = new HttpClient(clientHandler);
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
    client.BaseAddress = baseUri;
    HttpResponseMessage response = await client.GetAsync("http://www.test.com" + URL);
    string str2 = await response.Content.ReadAsStringAsync();

我找到了对相同行为的引用 here ,声明 DefaultRequestHeaders 中名为“Cookie”的 header 被忽略且未发送,但似乎任何其他值都将按预期工作。

关于c# - 从 httpwebrequest 切换到 httpclient,我不知道如何发送我的 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13784877/

相关文章:

c++ - 使用 C++ WRL 打开 UsbDevice - ERROR_INVALID_HANDLE

c# - 为什么从 C# 和 Java 发送的 http 内容不同?

c# - 寻找 Web 应用程序的设计技巧以将 SQL 数据显示为图表

c# - JWT TOKEN 生成 Client_Assertion

c# - 无法加载文件或程序集 'msshrtmi' 或其依赖项之一(Azure 表存储访问)

c# - 从 Windows 应用商店应用项目引用 C++ WinRT 组件

c# - IdentityServer3 和外部通过 OpenIDConnect 登录

c# - 有没有办法异步过滤 IList?

c# - Parallel.ForEach 的奇怪行为

c# - WinRT Metro 中的 GridView 选择颜色