将StreamContent和StringContent发送到API

问题描述 投票:0回答:1

当前正在尝试将 2 个图像和一个字符串发送到 API。

API调用:

var data = new
{
    mode = info
};

pathData = JsonConvert.SerializeObject(data.ToString());

var content = new MultipartFormDataContent
{
    { new StreamContent(frontStream), "front", front.FullName },
    { new StreamContent(backStream), "back", back.FullName },
    { new StringContent(pathData, Encoding.UTF8, "application/json") }
};

using var client = new HttpClient();
var response = await client.PostAsync($"https://localhost:987987987/Upload", content);

尝试使用 [FromBody],但我仍然收到“不支持的媒体类型”响应。

API:

[HttpPost]
public async Task<IActionResult> Post(IFormFile front, IFormFile back, [FromBody] string mode)
{          
    return Ok();
}    

非常感谢任何帮助,谢谢!

c# rest api model-view-controller
1个回答
0
投票

不幸的是,我认为

[FromBody]
[FromForm]
不能一起工作。您不应将完整对象作为“application/json”发送,而应迭代
data
中的每个属性,并将其附加为
StringContent
以及 MultipartFormDataContent 的键。

string pathData = JsonConvert.SerializeObject(data);
Dictionary<string, dynamic> dataDict = 
    JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(pathData);

var content = new MultipartFormDataContent
{
    { new StreamContent(frontStream), "front", front.FullName },
    { new StreamContent(backStream), "back", back.FullName },
};

foreach (var prop in dataDict)
{
    content.Add(new StringContent(prop.Value), prop.Key);
}

using var client = new HttpClient();
var response = await client.PostAsync($"https://localhost:987987987/Upload", content);

在上传 API 操作中,使用

UploadModel
作为参数修改方法签名:

public class UploadModel
{
    public IFormFile front { get; set; }
    public IFormFile back { get; set; }
    public string mode { get; set; }
}
[HttpPost("Upload")]
public async Task<IActionResult> Post([FromForm] UploadModel model)
{          
    return Ok();
}
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.