MultipartFormDataContent не добавляет Content-Type в HttpRequestBody - PullRequest
1 голос
/ 09 января 2020

У меня есть простой 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--

1 Ответ

0 голосов
/ 09 января 2020

Вы не добавили тип содержимого для отправки. Так что он не будет включен в запрос

using (var httpClient = new HttpClient()) {
    MultipartFormDataContent form = new MultipartFormDataContent();

    var stream = new MemoryStream(Encoding.UTF8.GetBytes("This is from a file"));
    var fileContent = new StreamContent(content: stream);
    //setting content type
    fileContent.Headers.ContentType = new MediaTypeHeaderValue("text/plain");

    form.Add(fileContent, name: "file", fileName: "File1.txt");

    var response = await httpClient.PostAsync(url, form);
}
...