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

通过Postman向Asp.Net WebAPI传输JSON与文件时触发异常,求解决方案

解决Asp.Net WebAPI同时接收文件与JSON数据的异常问题

先看你遇到的异常情况:
Api Exception

还有你当前Postman的传参方式:
Data passing through post man.

你现在的问题出在请求格式不匹配——当需要同时传输文件和JSON数据时,不能用Raw的JSON格式发送请求,Asp.Net WebAPI无法同时解析Raw JSON和文件内容。下面给你一步步的解决方法:

一、调整Postman的请求配置

  1. 保持POST请求方式不变,切换到Body标签页,选择form-data类型
  2. 添加两个字段:
    • 第一个字段:Key设为file(可以自定义,但要和后端参数名一致),类型选择File,然后点击右侧选择要上传的文件
    • 第二个字段:Key设为model(同样要和后端对应),类型选择Text,在Value里填入你的完整JSON内容

二、修改后端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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:43:05