如何在C#中使用HttpClient发送文件和表单数据

如何使用HttpClient发送文件和表单数据?

我有两种方法来发送文件或表单数据。 但我想像HTML表单一样发送它们。 我怎样才能做到这一点? 谢谢。

这是我的代码:

 if (openFileDialog1.ShowDialog() == DialogResult.OK) { var client = new HttpClient(); var requestContent = new MultipartFormDataContent(); filename = openFileDialog1.FileName; array = File.ReadAllBytes(filename); var imageContent = new ByteArrayContent(array); imageContent.Headers.ContentType = MediaTypeHeaderValue.Parse("audio/*"); requestContent.Add(imageContent, "audio", "audio.wav"); var values = new Dictionary { { "token", "b53b99534a137a71513548091271c44c" }, }; var content = new FormUrlEncodedContent(values); requestContent.Add(content); var response = await client.PostAsync("localhost", requestContent); var responseString = await response.Content.ReadAsStringAsync(); txtbox.Text = responseString.ToString(); } 

这是我用来发布表单信息和csv文件的代码

 using (var httpClient = new HttpClient()) { var surveyBytes = ConvertToByteArray(surveyResponse); httpClient.DefaultRequestHeaders.Add("X-API-TOKEN", _apiToken); httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var byteArrayContent = new ByteArrayContent(surveyBytes); byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("text/csv"); var response = await httpClient.PostAsync(_importUrl, new MultipartFormDataContent { {new StringContent(surveyId), "\"surveyId\""}, {byteArrayContent, "\"file\"", "\"feedback.csv\""} }); return response; } 

这是针对.net 4.5的。

请注意MultipartFormDataContent中的\“.MultipartFormDataContent中存在一个错误 。

在4.5.1中,MultipartFormDataContent使用正确的引号包装数据。

更新:此错误的链接不再有效,因为已退休的Microsoft Connect。