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

ASP.NET Core Web API中使用FromForm时接收对象为null的问题

问题解决:使用[FromForm]时ServiceInfo对象为null的原因及修复方案

核心问题原因

你的代码存在关键冲突:控制器上标注了[Consumes("application/json")],强制要求请求体为JSON格式,但参数又使用[FromForm]特性,要求ASP.NET Core从表单数据中绑定对象。两种规则不匹配,导致对象绑定失败,最终得到null。


分场景修复方案

场景1:React端需要上传文件(对应代码中注释的Images文件逻辑)

如果请求包含文件,必须使用表单数据(multipart/form-data)传输,此时需做以下修改:

  • 移除控制器上的[Consumes("application/json")]特性,因为表单数据和JSON格式不兼容
  • 确保React端用FormData对象构建请求体,且不要手动设置Content-Type(浏览器会自动处理multipart/form-data的边界)

修改后的控制器代码:

[Route("PotService")]
[HttpPost]
public async Task<IActionResult> Post([FromForm] ServiceInfo serviceInfo)
{
    // 恢复文件处理逻辑(注意要加await,避免异步操作未完成)
    using (MemoryStream stream = new MemoryStream())
    {
        await serviceInfo.Images.CopyToAsync(stream);
        // 这里可以添加文件后续处理逻辑
    }
    bool result = _serManager.AddService(serviceInfo);
    return Ok(result);
}

场景2:React端仅发送普通JSON数据(无文件上传)

如果不需要传输文件,直接用JSON格式即可,修改如下:

  • 移除参数上的[FromForm]特性,让ASP.NET Core默认从JSON请求体绑定对象
  • 确保React端发送请求时,设置Content-Type: application/json,并将数据序列化为JSON字符串

修改后的控制器代码:

[Route("PotService")]
[HttpPost]
[Consumes("application/json")]
public IActionResult Post(ServiceInfo serviceInfo)
{
    bool result = _serManager.AddService(serviceInfo);
    return Ok(result);
}

额外注意点

  • 若ServiceInfo类包含IFormFile类型的属性,必须使用场景1的表单数据方案,因为JSON无法直接传输文件
  • React端的请求格式必须和控制器配置严格匹配:发送FormData对应[FromForm],发送JSON对应默认的JSON绑定

内容的提问来源于stack exchange,提问作者Mahmud Hasan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:05:29