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

如何调试本地C# API项目?接口返回null问题排查

问题排查与修复方案

你的Disposition接口返回null,主要有以下几个关键问题,按优先级排查修复:

1. 异常处理逻辑错误(直接导致返回null)

代码中的catch块创建了错误返回对象却没有返回,执行完catch后会直接走到方法末尾的return null:

catch (Exception ex)
{
    var RME = new NMR_Object();
    RME.success = false;
    RME.message = "NMR POST: " + ex.Message;
    // 缺少return语句,导致进入catch后最终返回null
}

修复: 在catch块末尾添加返回语句:

catch (Exception ex)
{
    var RME = new NMR_Object();
    RME.success = false;
    RME.message = "NMR POST: " + ex.Message;
    return RME;
}

2. SQL语句语法错误

你的UPDATE语句末尾多了一个右括号,执行时会抛出语法异常,触发catch逻辑(但之前因catch无return导致返回null):

// 错误写法:末尾多了")"
myCommand.CommandText = "UPDATE NMR_SerialNo SET CorrectiveAction = @CorrectiveAction, DispositionResult = @DispositionResult, DispositionComment = @DispositionComment, NoteForGroup = @NoteForGroup WHERE SerialNo = @SerialNo");

修复: 去掉多余的右括号:

myCommand.CommandText = "UPDATE NMR_SerialNo SET CorrectiveAction = @CorrectiveAction, DispositionResult = @DispositionResult, DispositionComment = @DispositionComment, NoteForGroup = @NoteForGroup WHERE SerialNo = @SerialNo";

3. 模型绑定检查

观察控制台输出的Console.WriteLine($"nmr: {JsonConvert.SerializeObject(nmr)}"):

  • 如果输出nmr为null,说明模型绑定失败,检查NMR类的属性名称/类型是否与传入JSON完全匹配,确保类有公共无参构造函数,属性有公共setter
  • 如果输出的nmr属性值全为null,同样是绑定问题,可在Startup/Program.cs中配置JSON序列化支持大小写不敏感匹配

4. 数据库连接规范优化

当前代码未使用using语句管理连接,可能导致连接泄漏,建议修改为:

using (var conn = new MySqlConnection(ConfigurationManager.ConnectionStrings["constr_nmr"].ConnectionString))
{
    conn.Open();
    using (var myCommand = conn.CreateCommand())
    {
        myCommand.CommandText = "UPDATE NMR_SerialNo SET CorrectiveAction = @CorrectiveAction, DispositionResult = @DispositionResult, DispositionComment = @DispositionComment, NoteForGroup = @NoteForGroup WHERE SerialNo = @SerialNo";
        myCommand.Parameters.AddWithValue("@CorrectiveAction", CorrectiveAction);
        myCommand.Parameters.AddWithValue("@DispositionResult", DispositionResult);
        myCommand.Parameters.AddWithValue("@DispositionComment", DispositionComment);
        myCommand.Parameters.AddWithValue("@NoteForGroup", NoteForGroup);
        myCommand.Parameters.AddWithValue("@SerialNo", SerialNo);
        int affectedRows = myCommand.ExecuteNonQuery();
        // 可通过affectedRows判断是否有数据被更新,比如无匹配SerialNo时返回对应提示
    }
}

using语句会自动释放连接,避免手动关闭遗漏的问题。

调试步骤

  1. 在方法开头、catch块、return位置设置断点
  2. 调用接口时观察nmr参数是否正确绑定
  3. 执行数据库操作时查看是否抛出异常,记录异常信息
  4. 检查SQL执行的受影响行数,确认更新是否生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 00:53:18