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

Win11下ASP.NET Web API出现参数化查询参数未传递错误

问题描述
  • 运行环境:基于.NET 6.0开发的ASP.NET Web API,Windows 10本地运行正常,部署到Windows 11后报错
  • 错误信息:System.Data.SqlClient.SqlException (0x80131904),提示参数化查询期望参数@UserName但未提供
  • 测试工具:Postman
  • 已尝试的解决方法:
    • 将[FromBody]改为[FromForm]后出现415 Unsupported Media Type错误
    • 设置请求Content-Type为application/json,问题未解决

相关代码:

[HttpPost]
public IActionResult post([FromBody] User user)
{
    string query = "INSERT INTO User_Table (ut_User, ut_UserCode, ut_Branch) VALUES (@UserName, @UserCode, @Branch)";
    string query2 = "SELECT * FROM User_Table WHERE @UserName = ut_User";
    string sqlDataSource = _configuration.GetConnectionString("IMSConnStr");

    using (SqlConnection mycon = new SqlConnection(sqlDataSource))
    {
        mycon.Open();
        using (SqlCommand cmd = new SqlCommand(query2, mycon))
        {
            cmd.Parameters.AddWithValue("@UserName", user.UserName);
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.HasRows) return Ok(200);
        }
    }
    using (SqlConnection mycon = new SqlConnection(sqlDataSource))
    {
        mycon.Open();
        using (SqlCommand cmd = new SqlCommand(query, mycon))
        {
            cmd.Parameters.AddWithValue("@UserName", user.UserName);
            cmd.Parameters.AddWithValue("@UserCode", user.UserCode);
            cmd.Parameters.AddWithValue("@Branch", user.Branch);
            cmd.ExecuteNonQuery();
        }
        mycon.Close();
    }

    return Ok(200);
}
排查与解决思路
  1. 核心问题定位
    报错本质是user.UserName为null或未被正确绑定,Windows 11上的异常并非系统兼容性问题,而是请求参数绑定或运行环境配置的问题。

  2. 分步解决

  • 验证请求体格式
    确保Postman请求体为raw JSON格式,且结构与User类属性完全匹配,示例:
{
    "userName": "testUser",
    "userCode": "001",
    "branch": "Beijing"
}

注意属性名大小写(.NET默认大小写不敏感,但严格匹配可避免绑定异常)。

  • 检查User类定义
    确保类属性为公共可访问且包含setter,示例:
public class User
{
    public string UserName { get; set; }
    public string UserCode { get; set; }
    public string Branch { get; set; }
}

私有属性或无setter会导致JSON无法绑定到对象。

  • 启用绑定日志排查
    在Program.cs添加日志配置,查看绑定失败的具体原因:
builder.Logging.AddConsole();
builder.Services.AddControllers()
    .AddJsonOptions(options =>
    {
        options.JsonSerializerOptions.PropertyNameCaseInsensitive = true;
    });

运行后查看控制台日志,会显示参数绑定的详细错误信息。

  • 替换AddWithValue为强类型参数
    AddWithValue可能因类型推断问题导致参数未正确传递,改用强类型添加参数,同时处理null情况:
cmd.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = user.UserName ?? string.Empty;
  • 检查Windows 11上的.NET运行时
    确认Windows 11已安装与开发环境版本一致的ASP.NET Core 6.0运行时,运行时缺失会导致JSON解析组件异常。
  1. 代码优化建议
    合并数据库连接操作,避免重复开闭连接,同时返回更明确的响应状态码:
[HttpPost]
public IActionResult post([FromBody] User user)
{
    if (user == null || string.IsNullOrEmpty(user.UserName))
    {
        return BadRequest("用户信息不完整");
    }

    string query = "INSERT INTO User_Table (ut_User, ut_UserCode, ut_Branch) VALUES (@UserName, @UserCode, @Branch)";
    string query2 = "SELECT * FROM User_Table WHERE ut_User = @UserName";
    string sqlDataSource = _configuration.GetConnectionString("IMSConnStr");

    using (SqlConnection mycon = new SqlConnection(sqlDataSource))
    {
        mycon.Open();
        // 检查用户是否存在
        using (SqlCommand cmd = new SqlCommand(query2, mycon))
        {
            cmd.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = user.UserName;
            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                if (reader.HasRows)
                {
                    return Conflict("用户已存在");
                }
            }
        }
        // 插入新用户
        using (SqlCommand cmd = new SqlCommand(query, mycon))
        {
            cmd.Parameters.Add("@UserName", SqlDbType.NVarChar).Value = user.UserName;
            cmd.Parameters.Add("@UserCode", SqlDbType.NVarChar).Value = user.UserCode;
            cmd.Parameters.Add("@Branch", SqlDbType.NVarChar).Value = user.Branch;
            cmd.ExecuteNonQuery();
        }
    }

    return CreatedAtAction(nameof(post), new { userName = user.UserName }, user);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 22:43:16