文件上传接口调用报错:UnsupportedMediaType及栈溢出问题排查
问题分析与解决方案
核心问题原因
- API接口设计冲突:ASP.NET Core不允许同一个Action同时使用
[FromBody]和[FromForm]属性。[FromBody]用于绑定application/json格式的请求体,[FromForm]用于处理multipart/form-data表单数据,一个请求只能有一种Content-Type,同时使用会导致模型绑定逻辑混乱,甚至触发栈溢出。 - RestSharp调用格式错误:你同时使用
AddJsonBody(会自动设置Content-Type为application/json)和AddFile,又手动强行设置Content-Type为multipart/form-data,导致请求内容格式混乱,服务器无法识别,抛出UnsupportedMediaType异常。另外手动设置Content-Type会破坏RestSharp自动生成的multipart边界标识,进一步加剧解析失败。
修复方案
第一步:修正ASP.NET Core API接口
推荐使用统一的表单绑定方式,创建包含请求数据和文件的视图模型:
// 新建视图模型,包含业务请求数据和文件 public class AttachmentCreateModel { public MyRequest RequestData { get; set; } public IFormFile UploadFile { get; set; } } // 修正后的Action [HttpPut("Create")] public async Task<ActionResult<MyResult>> CreateAttachment([FromForm] AttachmentCreateModel model) { // 直接使用 model.RequestData 和 model.UploadFile 处理业务逻辑 return Ok(new MyResult()); }
如果不想新建视图模型,也可以将JSON数据作为表单的字符串字段传递,手动反序列化:
[HttpPut("Create")] public async Task<ActionResult<MyResult>> CreateAttachment([FromForm] string requestJson, [FromForm] IFormFile file) { var request = JsonSerializer.Deserialize<MyRequest>(requestJson); if (request == null) return BadRequest("请求数据格式错误"); // 业务处理逻辑... return Ok(new MyResult()); }
第二步:修正RestSharp调用代码
对应视图模型方案,RestSharp需要将业务请求数据序列化为JSON字符串,作为表单字段传递,同时添加文件:
// 使用Newtonsoft.Json序列化请求数据(或System.Text.Json) var requestJson = JsonConvert.SerializeObject(request); var restRequest = new RestRequest($"{Resource}/Create", Method.Put) // 添加业务请求数据作为表单字段 .AddParameter("RequestData", requestJson, ParameterType.GetOrPost) // 添加文件 .AddFile("UploadFile", fileData, request.FileName); // 无需手动设置Content-Type,RestSharp会自动处理为multipart/form-data var result = Client.Put<MyResult>(restRequest)!;
如果用的是第二种API方案(直接接收JSON字符串),只需要把参数名改成requestJson即可:
.AddParameter("requestJson", requestJson, ParameterType.GetOrPost)
额外注意事项
- 检查
MyRequest类是否存在循环引用,这是导致调试时栈溢出的常见原因,确保类结构可以正常序列化/反序列化。 - 不要手动设置
multipart/form-data的Content-Type,RestSharp在调用AddFile时会自动生成正确的请求头(包含边界标识),手动设置会覆盖这些关键信息。
内容的提问来源于stack exchange,提问作者Matthew Wherry
相关产品推荐
相关产品推荐

