【发布时间】: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