使用 .NET Core 3.1,我有以下 Http 客戶端,它構建了一個包含多部分/表單資料主體的 HTTP POST:
public async Task SendRequest(string randomString, IFormFileCollection files)
{
var form = new MultipartFormDataContent();
form.Add(new StringContent(randomString), "randomString");
foreach (var file in files)
{
var stream = new MemoryStream();
await file.CopyToAsync(stream, cancellationToken);
form.Add(new StreamContent(stream), "files");
}
using var request = new HttpRequestMessage(HttpMethod.Post, $"api/endpoint")
{
Content = form
};
await _httpClient.SendAsync(request);
}
接收控制器如下所示:
[Consumes("multipart/form-data")]
[HttpPost]
public async Task ReceiveForm([FromForm] RequestModel request)
{
//Do stuff
}
RequestModel 看起來像這樣:
public class RequestModel
{
[JsonPropertyName("randomString")]
public string RandomString { get; set; }
[JsonPropertyName("files")]
public IFormFileCollection Files { get; set; }
}
我看到的問題是requestModel.RandomString填充了,但requestModel.Files沒有填充- 它為空。我究竟做錯了什么?
uj5u.com熱心網友回復:
感謝示例中的完美代碼!
您應該將兩個引數(名稱和檔案名)設定為檔案-form.Add(new StreamContent(stream), "files", "files");
方法說明:
引數:
content:要添加到集合中的 HTTP 內容。
name:要添加的 HTTP 內容的名稱。
fileName:要添加到集合中的 HTTP 內容的檔案名。
這是我的例子:
var fileName = "files";
var byteArrayContent = new ByteArrayContent(fileBytes1);
form.Add(byteArrayContent, fileName, fileName);
var stream = new MemoryStream(fileBytes2);
form.Add(new StreamContent(stream), fileName, fileName);
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/343447.html
