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

[FromBody]接收Fetch传值始终为null,求排查解决方法

解决[FromBody]接收Fetch请求值为Null的问题

以下是针对该问题的排查步骤和解决方案:

1. 检查Sewa实体类定义

这是模型绑定失败最常见的原因:

  • 确保实体类的属性名称与前端JSON键完全一致(你的序列化配置已开启PropertyNameCaseInsensitive,大小写不影响,但名称必须完全匹配)
  • 实体类必须拥有公共无参构造函数
  • 所有需要绑定的属性必须有公共setter
  • 嵌套的DetailSewa对应的类/集合也要满足以上要求,比如前端传数组时,实体类对应属性应为public List<DetailSewaItem> DetailSewa { get; set; }

2. 验证前端请求体的合法性

  • 在JSON.stringify(sewa)前添加console.log(sewa),检查barangSewa(即DetailSewa的值)是否为合法JSON结构,避免包含undefined、循环引用对象,这些会导致JSON.stringify生成无效数据
  • 打开浏览器开发者工具的Network面板,查看请求的Payload确认发送的JSON字符串完整且格式正确;同时检查Request Headers中的Content-Type是否确实为application/json;charset=utf-8

3. 排查模型绑定错误详情

修改Controller代码,添加模型状态验证以获取具体绑定错误:

[HttpPost]
public IActionResult CreateSewaPeralatan([FromBody] Sewa model)
{
    ResponseSewa<Sewa> gResponse = new ResponseSewa<Sewa>();
    try
    {
        // 新增模型状态检查
        if (!ModelState.IsValid)
        {
            var errorMessages = ModelState.Values
                .SelectMany(v => v.Errors)
                .Select(e => e.ErrorMessage);
            gResponse.State = false;
            gResponse.Message = string.Join("; ", errorMessages);
            return StatusCode(StatusCodes.Status400BadRequest, gResponse);
        }

        _transaksiService.CreateSewa(model);
        gResponse.State = true;
        gResponse.Object = model;
    }
    catch (Exception ex)
    {
        gResponse.State = false;
        gResponse.Message = ex.Message;
    }
    return StatusCode(StatusCodes.Status200OK, gResponse);
}

前端捕获错误后可查看具体绑定失败原因,比如属性类型不匹配。

4. 确认路由匹配正确性

检查TransaksiController类上的路由配置,确保/Transaksi/CreateSewaPeralatan能正确映射到目标Action。例如Controller类需标注:

[Route("[controller]")]
public class TransaksiController : Controller
{
    // ...你的Action代码
}

5. 类型匹配与序列化配置补充

  • 如果Sewa类包含枚举类型(如TipeDokumen),需在序列化配置中添加枚举转换器:
services.AddMvc()
        .AddJsonOptions(options =>
        {
            options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
            options.JsonSerializerOptions.PropertyNamingPolicy = null;
            // 添加枚举字符串转换器
            options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
        });
  • 日期类型(如TanggalAcara)需确保前端传递的格式能被后端解析,比如YYYY-MM-DD格式,或在实体类属性上标注自定义转换逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:50:23