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

React+ASP.NET Core Web API注册接口接收数据为Null问题求助

问题排查与解决

核心原因

React端发送请求时,将表单数据包裹在了额外的values对象中,导致后端无法正确映射到User实体字段;同时后端控制器未明确指定从请求体绑定数据,这也是字段为空的关键诱因。

具体修复步骤

1. 修正React端请求数据格式

在onSubmit方法中,直接传递整理后的表单数据,移除不需要的confirm_password字段(后端实体无此属性):

onSubmit: (values) => {
    console.log(values);
    // 移除不需要的确认密码字段
    const submitData = {...values};
    delete submitData.confirm_password;
    try {
        axios({
            method: "post",
            url: "http://localhost:64082/api/users/register",
            data: submitData // 直接传递整理后的表单数据
        });
        alert("Success!");
    } catch (error) {
        alert("Error: " + error);
    }
},

2. 后端控制器添加[FromBody]特性

ASP.NET Core默认不会自动从请求体绑定复杂类型,需在参数上添加[FromBody]明确指定绑定来源:

[HttpPost("register")]
public async Task<IActionResult> Register ([FromBody]User oUser)
{
    var result = await _userService.Register(oUser); // 添加await等待异步方法执行
    return result != null ? Ok(result) : BadRequest(result);
}

3. 修复仓储层异步调用问题

仓储的Register方法是异步方法,原控制器调用时未使用await,会导致异步操作未完成就返回结果,需补充await(如上代码所示)。

额外排查点

  • CORS配置:前端与后端端口不同,需确保后端已配置CORS允许前端域名访问:
    // Program.cs中添加CORS服务配置
    builder.Services.AddCors(options =>
    {
        options.AddPolicy("AllowLocalhost", policy =>
        {
            policy.WithOrigins("http://localhost:你的前端端口")
                  .AllowAnyHeader()
                  .AllowAnyMethod();
        });
    });
    // 在路由配置后启用CORS
    app.UseRouting();
    app.UseCors("AllowLocalhost");
    
  • JSON序列化配置:确保后端JSON序列化规则与前端字段大小写匹配,若需保持实体字段的PascalCase命名与前端一致,可关闭默认驼峰序列化:
    builder.Services.AddControllers()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
        });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 13:45:33