C# 将WebClient转换为HttpClient

C# 将WebClient转换为HttpClient,c#,wpf,uwp,httpclient,webclient,C#,Wpf,Uwp,Httpclient,Webclient,我已经冲浪和工作了好几个小时了,现在我要扔掉我的电脑了 我在WPF应用程序上有一个WebClient,需要转换为HttpClient以用于UWP应用程序。我得到了很多标题错误,因为我不是一个网络大师,我打败了自己 这是原件,如果有人能非常友好地帮助我将其转换为HttpClient,我将非常感谢 using (var client = new WebClient()) { string request = "------WebKitFormBoundarygWsJMIUcbjwBPfeL"

我已经冲浪和工作了好几个小时了,现在我要扔掉我的电脑了

我在WPF应用程序上有一个WebClient,需要转换为HttpClient以用于UWP应用程序。我得到了很多标题错误,因为我不是一个网络大师,我打败了自己

这是原件,如果有人能非常友好地帮助我将其转换为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希望我如何添加这些头

请尝试以下操作:

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); 
} 

我知道。我经常看到这个问题。WebClient比HttpClient聪明得多。我通常使用诸如fiddler或wireshark之类的嗅探器,通过工作应用程序(比如您的WebClient)捕获http头。然后将缺少的头添加到我的HttpClient中。我意识到,这个关键字是“MultipartFormDataContent”,而不是“content type”。但我没能为你找到一个UWP的例子。@kennyzx,你帮了很多忙。我认为你的第二个答案有效。。。然而;我必须先“清除”标题,然后才能开始。我不知道为什么,但我读到其他人也有同样的问题,所以我尝试了一下,效果很好。重新发布,我将编辑答案。@kennyzx问题归结为。。。使用(var-httpClient=new-httpClient()){var-httpContent=new-StringContent(请求);httpContent.Headers.Clear();httpContent.Headers.Add(“内容类型”,“多部分/表单数据;边界=----WebKitFormBoundarygWsJMIUcbjwBPfeL”);var response=wait httpClient.PostAsync(requestUri,httpContent);}谢谢。但你们不需要把它标记为答案,因为我们不知道为什么它是这样工作的。您可以提供向上投票;)这不管用。我得到了这个例外。在意外时间调用了一个方法。误用的标题名。请确保将请求头与HttpRequestMessage一起使用,将响应头与HttpResponseMessage一起使用,将内容头与HttpContent对象一起使用。您好,请尝试其他方法。之前的答案是什么在Windows应用商店应用程序中起作用,我没有用UWP测试它。不,现在我得到了值“多部分/表单数据”的格式;boundary=----WebKitFormBoundarygWsJMIUcbjwBPfeL'无效。我真的开始不喜欢HttpClient了:/我一直在尝试我能找到和/或想到的每种可能的格式,但没有任何东西能让我得到任何东西。但是对于旧的WebClient,相同的内容类型标题就行了?