REST API增改数据PostMan报错:未提供@Name参数求助
解决REST API中参数
@Name未提供的报错问题 报错信息表明数据库执行参数化查询时,@Name参数未被正确传递到SQL命令中,这通常和模型绑定失败或参数空值处理不当有关,以下是具体解决方案:
1. 检查模型类定义
确保AddItem和UpdateItem类的属性名称与请求体字段匹配,且具备正确的可访问性:
public class AddItem { public string Name { get; set; } public int Code { get; set; } public string Brand { get; set; } public int Price { get; set; } public int Quantity { get; set; } } public class UpdateItem { public string Name { get; set; } public int Code { get; set; } public string Brand { get; set; } public int Price { get; set; } public int Quantity { get; set; } }
如果PostMan发送的是驼峰命名字段(如"name"),需为属性添加特性指定映射名称(以System.Text.Json为例):
using System.Text.Json.Serialization; public class AddItem { [JsonPropertyName("name")] public string Name { get; set; } // 其他属性同理 }
2. 修复SQL参数的空值处理
当Name或Brand为null时,AddWithValue会生成未定义参数,导致SQL报错,需显式替换为DBNull.Value:
修改AddItem方法参数逻辑:
command.Parameters.AddWithValue("@Name", string.IsNullOrEmpty(additem.Name) ? DBNull.Value : (object)additem.Name); command.Parameters.AddWithValue("@Code", additem.Code); command.Parameters.AddWithValue("@Brand", string.IsNullOrEmpty(additem.Brand) ? DBNull.Value : (object)additem.Brand); command.Parameters.AddWithValue("@Price", additem.Price); command.Parameters.AddWithValue("@Quantity", additem.Quantity);
修改UpdateItem方法参数逻辑:
command.Parameters.AddWithValue("@Name", string.IsNullOrEmpty(Update.Name) ? DBNull.Value : (object)Update.Name);
3. 确保PostMan请求格式正确
POST请求(添加商品):
- URL:
http://你的API地址/api/[控制器名称]/additems - 请求方法:POST
- 请求头:添加
Content-Type: application/json - 请求体(Raw → JSON):
{ "name": "测试商品", "code": 1001, "brand": "测试品牌", "price": 50, "quantity": 10 }
PUT请求(更新商品):
- URL:
http://你的API地址/api/[控制器名称]/updateitem/1(1为要更新的商品ID) - 请求方法:PUT
- 请求头:添加
Content-Type: application/json - 请求体(Raw → JSON):
{ "name": "更新后商品", "code": 1001, "brand": "更新品牌", "price": 60, "quantity": 15 }
4. 优化接口返回值(可选)
将void返回类型改为IActionResult,便于返回HTTP状态码和调试信息:
[HttpPost] [Route("/api/[controller]/additems")] public IActionResult AddItem(AddItem additem) { if (!ModelState.IsValid) { return BadRequest(ModelState); // 返回模型绑定错误详情 } using (var connection = new SqlConnection(ConnectionString)) { var query = "INSERT INTO Items (Name, Code, Brand, Price, Quantity) VALUES (@Name, @Code, @Brand, @Price, @Quantity)"; using (var command = new SqlCommand(query, connection)) { command.Parameters.AddWithValue("@Name", string.IsNullOrEmpty(additem.Name) ? DBNull.Value : (object)additem.Name); command.Parameters.AddWithValue("@Code", additem.Code); command.Parameters.AddWithValue("@Brand", string.IsNullOrEmpty(additem.Brand) ? DBNull.Value : (object)additem.Brand); command.Parameters.AddWithValue("@Price", additem.Price); command.Parameters.AddWithValue("@Quantity", additem.Quantity); connection.Open(); var rowsAffected = command.ExecuteNonQuery(); return rowsAffected > 0 ? Ok("商品添加成功") : StatusCode(500, "添加失败"); } } }
内容的提问来源于stack exchange,提问作者dolphin
相关产品推荐
相关产品推荐

