通过Postman向Asp.Net WebAPI传输JSON与文件时触发异常,求解决方案
解决Asp.Net WebAPI同时接收文件与JSON数据的异常问题
先看你遇到的异常情况:
还有你当前Postman的传参方式:
你现在的问题出在请求格式不匹配——当需要同时传输文件和JSON数据时,不能用Raw的JSON格式发送请求,Asp.Net WebAPI无法同时解析Raw JSON和文件内容。下面给你一步步的解决方法:
一、调整Postman的请求配置
- 保持POST请求方式不变,切换到
Body标签页,选择form-data类型 - 添加两个字段:
- 第一个字段:Key设为
file(可以自定义,但要和后端参数名一致),类型选择File,然后点击右侧选择要上传的文件 - 第二个字段:Key设为
model(同样要和后端对应),类型选择Text,在Value里填入你的完整JSON内容
- 第一个字段:Key设为
二、修改后端WebAPI的控制器方法
方式1:分开接收文件和JSON字符串
using Microsoft.AspNetCore.Mvc; using System.Text.Json; [ApiController] [Route("api/[controller]")] public class UploadController : ControllerBase { [HttpPost] public IActionResult UploadFileAndData([FromForm] IFormFile file, [FromForm] string model) { // 先验证文件是否有效 if (file == null || file.Length == 0) { return BadRequest("请选择要上传的文件"); } // 将JSON字符串反序列化为你的实体类 try { var yourDataModel = JsonSerializer.Deserialize<YourCustomModel>(model); // 这里可以处理文件保存、业务逻辑等操作 return Ok(new { Message = "文件和数据接收成功", FileName = file.FileName, Data = yourDataModel }); } catch (JsonException ex) { return BadRequest($"JSON格式错误:{ex.Message}"); } } } // 你的自定义实体类示例 public class YourCustomModel { public string Name { get; set; } public int Age { get; set; } // 其他属性根据你的需求添加 }
方式2:用DTO类统一接收
如果你的数据结构比较复杂,可以创建一个DTO类来封装文件和数据,这样代码更整洁:
public class UploadRequestDto { public IFormFile File { get; set; } public YourCustomModel Model { get; set; } } [HttpPost] public IActionResult UploadWithDto([FromForm] UploadRequestDto request) { if (request.File == null || request.File.Length == 0) { return BadRequest("文件不能为空"); } // 直接使用request.Model即可,框架会自动完成JSON反序列化 return Ok(new { FileName = request.File.FileName, ReceivedData = request.Model }); }
三、额外注意事项
- Postman会自动设置正确的
Content-Type: multipart/form-data,不要手动修改这个请求头 - 后端参数名要和Postman里的字段Key完全一致(大小写敏感)
- 如果上传大文件,需要在
appsettings.json里调整请求大小限制:"Kestrel": { "Limits": { "MaxRequestBodySize": 52428800 // 这里设置为50MB,根据你的需求调整 } }
内容的提问来源于stack exchange,提问作者Kavitha Prabhu
相关产品推荐
相关产品推荐

