繁体   English   中英

使用 C# HttpClient 在没有 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 一起使用,因为它似乎总是使用多部分。

有什么反对将 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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM