【问题标题】:Converting WebClient to HttpClient将 WebClient 转换为 HttpClient
【发布时间】:2017-06-16 02:16:27
【问题描述】:

我已经在网上冲浪并为此工作了好几个小时,而且我已经准备好扔掉我的电脑了。

我在 WPF 应用程序上有一个 WebClient,需要将其转换为 UWP 应用程序的 HttpClient。我收到很多标题错误,而且由于我不是网络专家,所以我正在殴打自己。

这是原件,如果有人非常友善并帮助我将其转换为 HttpClient,我将非常感激。

using (var client = new WebClient())
{
    string request = "------WebKitFormBoundarygWsJMIUcbjwBPfeL"
                    + Environment.NewLine
                    + "Content-Disposition: form-data; name=\"guid\""
                    + Environment.NewLine
                    + Environment.NewLine
                    + presetSmall.PresetId.ToString()
                    + Environment.NewLine
                    + "------WebKitFormBoundarygWsJMIUcbjwBPfeL"
                    + Environment.NewLine
                    + "Content-Disposition: form-data; name=\"delay\""
                    + Environment.NewLine
                    + Environment.NewLine
                    + "0"
                    + Environment.NewLine
                    + "------WebKitFormBoundarygWsJMIUcbjwBPfeL--"
                    + Environment.NewLine;

    client.Headers.Add(HttpRequestHeader.ContentType, "multipart/form-data; boundary=----WebKitFormBoundarygWsJMIUcbjwBPfeL");

    client.UploadStringAsync(new Uri(ServerName + UriForPresetExecution), "POST", request);

}

问题出在 client.Headers.Add 方法中...我暂时无法弄清楚 HttpClient 希望我如何添加这些标头。

【问题讨论】:

  • 我知道。看到很多问题。 WebClient 比 HttpClient 更智能。我通常使用像 fiddler 或 wireshark 这样的嗅探器,并使用工作应用程序(如您的 WebClient)捕获 http 标头。然后将缺少的标头添加到我的 HttpClient。
  • 我意识到这个关键字是“MultipartFormDataContent”,而不是“content-type”。但我没有找到适合你的 UWP 示例。
  • @kennyzx 你帮了很多忙。我认为您的第二个答案有效……但是;我必须先“清除”标题。我不知道为什么,但我读到其他人也有同样的问题,所以我试了一下,它奏效了。重新发布,我将编辑答案。
  • @kennyzx 归结为... using (var httpClient = new HttpClient()) { var httpContent = new StringContent(request); httpContent.Headers.Clear(); httpContent.Headers.Add("Content-Type", "multipart/form-data;boundary=----WebKitFormBoundarygWsJMIUcbjwBPfeL"); var response = await httpClient.PostAsync(requestUri, httpContent); }
  • 谢谢。但是您不需要将其标记为答案,因为我们不知道它为什么会这样工作。你可以提供一个upvote ;)

标签: c# wpf uwp httpclient webclient


【解决方案1】:

请试试这个:

using System.Net.Http;
using System.Net.Http.Headers;

using (var httpClient = new HttpClient()) 
{ 
    var httpContent = new StringContent(request); 
    httpContent.Headers.Clear(); 
    httpContent.Headers.Add("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundarygWsJMIUcbjwBPfeL"); 
    var response = await httpClient.PostAsync(requestUri, httpContent); 
} 

【讨论】:

  • 这不起作用。我得到了这个例外。在意外的时间调用了一个方法。误用的标头名称。确保请求标头与 HttpRequestMessage 一起使用,响应标头与 HttpResponseMessage 一起使用,内容标头与 HttpContent 对象一起使用。
  • 嗨,请尝试替代方案。上一个答案是在 Windows 应用商店应用程序中运行的内容,我没有使用 UWP 对其进行测试。
  • 不,现在我明白了 - 值的格式'multipart/form-data;边界=----WebKitFormBoundarygWsJMIUcbjwBPfeL' 无效。我真的开始不喜欢 HttpClient :/
  • 我一直在尝试我能找到和/或想到的所有可能的格式,但什么都没有。
  • 但是对于旧的 WebClient,相同的内容类型标头也可以工作吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多