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

ASP.NET Core 3.1 REST API接收form-data时参数全为null如何解决?

问题解决排查步骤

按照优先级从高到低逐一排查即可:

  1. 检查是否加了错误的[Consumes]特性
    如果你的Controller或Action上标注了[Consumes("application/json")],会导致接口只处理JSON格式请求,直接忽略form-data类型的请求。可以删掉该特性,或者显式指定接收表单类型:
[HttpPost("upload")]
[Consumes("multipart/form-data")]
public ActionResult<UploadResponse> Upload([FromForm] UploadRequest req)
  1. 确认模型类有公共无参构造函数
    ASP.NET Core模型绑定需要通过无参构造函数实例化接收对象,如果你给UploadRequest自定义了带参构造函数,必须显式补充公共无参构造:
public class UploadRequest
{
    // 显式添加无参构造
    public UploadRequest(){}

    public IFormFile File { get; set; }
    public string Format { get; set; }
    public string CaseId { get; set; }
    public string Description { get; set; }
}
  1. 修正Postman请求配置
  • 不要手动在Headers里加Content-Type: multipart/form-data,Postman会自动生成带boundary参数的请求头,手动添加会丢失boundary导致服务端无法解析表单
  • File字段的类型必须选择「File」(Postman的key输入框右侧下拉可选,默认是Text类型,选Text无法绑定到IFormFile)
  • 所有form字段的key不要带前后空格,和类属性名保持一致即可(默认绑定不区分大小写)
  1. 检查是否有中间件提前消耗了请求体
    如果你有自定义的日志、鉴权中间件读取了Request.Body,读取完成后必须重置流的位置,否则模型绑定器无法读取到表单内容:
// 中间件读取请求体后添加这行重置位置
context.Request.Body.Position = 0;
  1. 调整上传大小限制
    如果上传文件超过默认30MB的大小限制,会导致表单解析失败,可以在Action上添加特性调整上限:
[HttpPost("upload")]
[RequestSizeLimit(100 * 1024 * 1024)] // 按需求调整上限,示例为100MB
public ActionResult<UploadResponse> Upload([FromForm] UploadRequest req)
  1. 确认服务注册配置正确
    .NET 6+的Program.cs必须注册控制器服务并完成路由映射:
var builder = WebApplication.CreateBuilder(args);
// 注册控制器服务
builder.Services.AddControllers();

var app = builder.Build();
// 映射控制器路由
app.MapControllers();

app.Run();

如果你使用的是ASP.NET Core 最小API模式,默认不支持[FromForm]绑定复杂类对象,建议改用MVC控制器模式,或者手动读取表单内容赋值。


内容的提问来源于stack exchange,提问作者Martin Přívozník

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 03:57:00