簡體   English   中英

通過 Files in C# HttpClient Post 請求

[英]Pass Files in C# HttpClient Post request

我正在 C# 中編寫代碼以使用 POST API,它接受具有以下參數的表單主體。

文件[數組](用戶可以在請求中發送多個文件)

TemplateId[Int]

此外,我需要在 HTTP 客戶端發布請求中將承載 AuthToken 作為 header 傳遞。

我需要一些幫助來編寫帶有上述表單數據的 HTTP 請求。

using (var client = new HttpClient())
{
   HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, $" {_apiBaseUri}/{route}");

   requestMessage.Headers.Authorization = new AuthenticationHeaderValue($"Bearer {authToken}");
   var pdfFiles = Directory.GetFiles($"C:\\files", "*.pdf");
   foreach (var filename in pdfFiles)
   {
      // create array[] of each File and add them to the form data request
   }
   // Add TemplateId in the form data request
} 

postman 請求在此處輸入圖像描述

swagger 請求在此處輸入圖像描述

您可以使用“MultipartFormDataContent”添加文件。

private static async Task UploadSampleFile()
{
    var client = new HttpClient
    {
        BaseAddress = new("https://localhost:5001")
    };

    await using var stream = System.IO.File.OpenRead("./Test.txt");
    using var request = new HttpRequestMessage(HttpMethod.Post, "file");
    using var content = new MultipartFormDataContent
    {
        { new StreamContent(stream), "file", "Test.txt" }
    };

    request.Content = content;

    await client.SendAsync(request);
}

更多信息: https://brokul.dev/sending-files-and-additional-data-using-httpclient-in.net-core

下面的代碼更改對我有用,

using (var httpClient = new HttpClient())
{
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), _apiBaseUri))
    {
        request.Headers.TryAddWithoutValidation("Authorization", $"Bearer {authToken}");

        var pdfFiles = Directory.GetFiles($"C:\\test", "*.pdf");
        var multipartContent = new MultipartFormDataContent();
        multipartContent.Add(new StringContent("100"), "templateId");
        foreach (var filename in pdfFiles)
        {
            multipartContent.Add(new ByteArrayContent(File.ReadAllBytes(filename)), "files", Path.GetFileName(filename));
        }
        request.Content = multipartContent;

        var response = await httpClient.SendAsync(request);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM