You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向API发送StreamContent与StringContent时遇Unsupported Media Type问题求助

解决Multipart上传文件+字符串参数的"Unsupported Media Type"问题

问题根源

  1. 客户端代码错误:
    • 序列化逻辑错误:JsonConvert.SerializeObject(data.ToString())会把对象的类型名称(如<>f__AnonymousType01[System.String]`)序列化,而非实际的JSON结构。
    • 字符串内容未指定参数名:MultipartFormDataContent中的StringContent没有设置name属性,导致API无法识别对应的参数。
  2. API端接收方式错误:
    • [FromBody]用于接收请求体为JSON/XML格式的参数,不适用于Multipart/form-data类型的表单参数,这类参数需直接从表单绑定接收。

修正后的代码

客户端代码

如果只需传递普通字符串参数,可简化为:

var modeValue = info; // 假设info是你的目标字符串变量

var content = new MultipartFormDataContent
{
    { new StreamContent(frontStream), "front", front.FullName },
    { new StreamContent(backStream), "back", back.FullName },
    // 指定参数名为"mode",与API端参数名对应
    { new StringContent(modeValue, Encoding.UTF8), "mode" }
};

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

如果需要传递JSON格式的参数(比如mode是复杂对象),修正序列化逻辑:

var data = new
{
    mode = info
};
// 直接序列化data对象,而非data.ToString()
var pathData = JsonConvert.SerializeObject(data);

var content = new MultipartFormDataContent
{
    { new StreamContent(frontStream), "front", front.FullName },
    { new StreamContent(backStream), "back", back.FullName },
    // 指定参数名,并设置正确的媒体类型
    { new StringContent(pathData, Encoding.UTF8, "application/json"), "mode" }
};

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

API端代码

接收普通字符串参数的版本:

[HttpPost("Upload")]
public async Task<IActionResult> Post(IFormFile front, IFormFile back, string mode)
{          
    // 编写你的业务处理逻辑
    return Ok();
}    

如果接收JSON格式的对象参数,需定义模型类配合接收:

public class ModeRequest
{
    public string Mode { get; set; }
}

[HttpPost("Upload")]
public async Task<IActionResult> Post(IFormFile front, IFormFile back, [FromForm] ModeRequest mode)
{          
    // 通过mode.Mode获取参数值
    return Ok();
}    

关键说明

  • Multipart/form-data请求中,所有参数(文件和普通数据)都属于表单内容,API端默认从表单绑定参数,无需[FromBody],显式使用[FromForm]也可。
  • 客户端添加Multipart内容时,必须为每个参数指定与API端一致的name,否则参数无法被正确识别。

内容的提问来源于stack exchange,提问作者Queen Mochi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:22:43