使用 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();
我正在尝试与不支持 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();