【问题标题】:asp.net core - modelstate badrequest inconsistent behaviourasp.net core - modelstate badrequest 不一致的行为
【发布时间】:2017-01-10 06:25:36
【问题描述】:

我有一个简单的模型:

public class Item : Entity<int>
{
    [Required]
    public string Name { get; set; }
    [Required]
    public int Cost { get; set; }
}

内部控制器:

[HttpPost]
public async Task<IActionResult> Create([FromBody] Item item)
{
    if(!ModelState.IsValid) 
    {
       return BadRequest(ModelState);
    }
    repository.Create(item);
    await repository.SaveAsync();
    return Created($"/api/v1/items/{item.Id}", new { message = "Item was created successfully!" });
}

现在,对于以下三个不正确的示例输入,我得到以下响应:

示例 #1:

POST http://localhost:5000/api/v1/items
content-type: application/json

{
    "name": "sample1",
    "cost": $100000
}

回复:

{
  "cost": [
    "The input was not valid."
  ]
}

示例 #2:

POST http://localhost:5000/api/v1/items
content-type: application/json

{
    "name": "sample2",
    "cost": "10000000000000000000000000"
}

回复:

{
  "cost": [
    "The input was not valid."
  ]
}

示例 #3:这似乎是一个错误。出现一个空键(而不是 int out of range 错误)

POST http://localhost:5000/api/v1/items
content-type: application/json

{
    "name": "sample3",
    "cost": 10000000000000000000000000
}

回复:

{
  "": [
    "The input was not valid."
  ],
  "cost": [
    "The input was not valid."
  ]
}

编辑: 在 github 上添加了一个跟踪票 - https://github.com/aspnet/Mvc/issues/5672

【问题讨论】:

    标签: c# asp.net validation asp.net-core


    【解决方案1】:

    第一个和最后一个是无效的 json,第二个对于整数 cost 的数字太大。确保您的费用不超过INT_MAX: 2147483647

    【讨论】:

    • 我知道,但是为什么错误显示一个没有键的额外属性
    • 误读您的问题,抱歉。我的猜测是它找到了最后一个开口" 并认为它开始了一个新值。由于没有定义名称,因此将其输出为空且无效。这似乎是一个错误,因为它不应将此 " 视为新值,而应将 cost 的一部分视为 , 之前的一部分。我会在github上报告github.com/aspnet/Home
    猜你喜欢
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2021-11-09
    • 2016-12-31
    相关资源
    最近更新 更多