У меня есть простой HttpClient, который отправляет данные multipart / form-data в конечную точку.
using (var httpClient = new HttpClient())
{
using (var request = new HttpRequestMessage(new HttpMethod("POST"), url))
{
MultipartFormDataContent mfdc = new MultipartFormDataContent();
mfdc.Add(new StreamContent(content: new MemoryStream(Encoding.UTF8.GetBytes("This is from a file"))),
name: "file",
fileName: "File1.txt");
var response = await httpClient.PostAsync(url, mfdc);
}
}
Этот код создает этот запрос:
Content-Type: multipart/form-data; boundary="0d411b9f-a36b-4326-97b6-85c781d348d2"
Content-Length: 196
Host: somehost.net
--0d411b9f-a36b-4326-97b6-85c781d348d2
Content-Disposition: form-data; name=file; filename=File1.txt; filename*=utf-8''File1.txt
This is from a file
--0d411b9f-a36b-4326-97b6-85c781d348d2--
Проблема, с которой я сталкиваюсь, заключается в том, что вызываемый API требует наличия Content-Type в теле запроса также.
Правильный запрос должен выглядеть следующим образом:
Content-Type: multipart/form-data; boundary="0d411b9f-a36b-4326-97b6-85c781d348d2"
Content-Length: 196
Host: somehost.net
--0d411b9f-a36b-4326-97b6-85c781d348d2
Content-Disposition: form-data; name=file; filename=File1.txt; filename*=utf-8''File1.txt
Content-Type: text/plain
This is from a file
--0d411b9f-a36b-4326-97b6-85c781d348d2--