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

如何在.NET Core API中接收MultipartFormDataContent并解决415错误

问题定位

你遇到的Unsupported Media Type错误核心原因出在接收文件的API参数绑定逻辑错误:

  1. [FromBody]特性仅支持解析application/json、application/xml这类序列化的单一体请求内容,无法处理你发送的multipart/form-data格式的多部分请求
  2. ASP.NET Core 原生不支持直接将MultipartFormDataContent作为控制器接口参数进行自动绑定

修复方案

第一步:修改接收端API的参数绑定逻辑

推荐用自定义模型绑定的方式同时接收文件和附加JSON数据:

  1. 先定义接收模型
public class SendMailRequest
{
    // 对应你上传的文件字段,多文件可改为List<IFormFile>类型
    public IFormFile File { get; set; }
    // 对应你发送的data字段,存储序列化后的JSON字符串
    public string Data { get; set; }
}
  1. 调整接口定义,将[FromBody]改为[FromForm]
[HttpPost("apisendfile")]
public async Task<ActionResult> SendMail([FromForm] SendMailRequest formData)
{
    // 反序列化得到你的业务参数
    // var businessData = JsonConvert.DeserializeObject<你发送端序列化的request对应的类>(formData.Data);
    // 处理文件:formData.File.OpenReadStream()即可读取文件流
}

如果你不想额外定义模型,也可以直接读取请求表单内容:

[HttpPost("apisendfile")]
public async Task<ActionResult> SendMail()
{
    var formData = await Request.ReadFormAsync();
    var dataJson = formData["data"].FirstOrDefault();
    var file = formData.Files["File"];
    // 后续业务逻辑
}

第二步:可选优化发送端逻辑

部分.NET Core版本解析multipart/form-data的边界参数时,遇到双引号会解析失败,可以在发送端调用PostAsync前添加以下代码规避:

// 移除边界参数的双引号,避免服务端解析异常
var boundaryParameter = multipartFormData.Headers.ContentType.Parameters.First(p => p.Name == "boundary");
boundaryParameter.Value = boundaryParameter.Value.Replace("\"", string.Empty);

内容的提问来源于stack exchange,提问作者Mr Perfect

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:57:05