使用 C# HttpClient 到 POST 没有 multipart/form-data 的文件

Using C# HttpClient to POST File without multipart/form-data

我正在尝试与不支持 multipart/form-data 上传文件的 API 交互。

我已经能够让它与旧的 WebClient 一起工作,但由于它已被弃用,我想使用较新的 HttpClient。

我为 WebClient 使用此端点的代码如下所示:

            using (WebClient client = new WebClient())
            {
                byte[] file = File.ReadAllBytes(filePath);

                client.Headers.Add("Authorization", apiKey);
                client.Headers.Add("Content-Type", "application/pdf");
                byte[] rawResponse = client.UploadData(uploadURI.ToString(), file);
                string response = System.Text.Encoding.ASCII.GetString(rawResponse);

                JsonDocument doc = JsonDocument.Parse(response);
                return doc.RootElement.GetProperty("documentId").ToString();
            }

我还没有找到一种方法来获得与 HttpClient 等效的上传,因为它似乎总是使用 multipart。

反对将 HttpClient 的 PostAsync 方法与 ByteArrayContent 结合使用的原因是什么?

byte[] fileData = ...;

var payload = new ByteArrayContent(fileData);
payload.Headers.Add("Content-Type", "application/pdf");

myHttpClient.PostAsync(uploadURI, payload);

我觉得应该是这样的

using var client = new HttpClient();

var file = File.ReadAllBytes(filePath);

var content = new ByteArrayContent(file);
content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

var result = client.PostAsync(uploadURI.ToString(), content).Result;
result.EnsureSuccessStatusCode();

var response = await result.Content.ReadAsStringAsync();
var doc = JsonDocument.Parse(response);

return doc.RootElement.GetProperty("documentId").ToString();