我有这个 webapi 并尝试使用“modelstate.IsValid”函数,但我遇到了一些奇怪的问题。 我的 Controller 中有以下方法:
[HttpPut]
[Route("{id}")]
public async Task<IActionResult> Put([FromBody]ItemUpdateModel model, [FromRoute]int id)
{
if (!ModelState.IsValid) //Here i have a breakpoint!
{
return BadRequest(new
{
code = 400,
message = ModelState.Values.First().Errors.First().ErrorMessage
});
}
}
这是模型,ItemUpdateModel
using System.ComponentModel.DataAnnotations;
namespace TestApi.Models
{
public class ItemUpdateModel
{
[Required]
[Display(Name = "title")]
[MaxLength(40)]
public string Title { get; set; }
[Required]
[Display(Name = "discount")]
public double Discount { get; set; }
[Required]
[Display(Name = "priceupdate")]
public bool PriceUpdate { get; set; }
}
}
我使用 Postman 在正文中使用动词 PUT 和格式 json 发送此 http 请求:
{ "title": "Some test", "discount": 0, "priceupdate": false }
此请求应该可以正常通过,但即使我尝试遗漏一些属性,模型状态也始终为真。 所以当查看模型状态时,这个模型根本没有绑定(bind)到它。只有 [FromRoute]int id 被绑定(bind),modelstate 才有效。
除了模型状态验证/绑定(bind)之外,模型无论如何都会填充数据并正常工作。
同样在标题 im 中包括:“application/json; charset=utf-8”
任何人都可以帮我解决这个问题,我为此付出了很多努力,这似乎是一项非常简单的任务:)
谢谢!
最佳答案
终于解决了这个问题。
出于某种原因,模型状态不会处理“有效”的模型。模型通过 JSON 格式化程序通过为 bool 值添加值 0 或 false 为数据类型 double 和 int 添加缺失值而变得有效。解决方案是使模型中的属性可为空,例如
public double? Price { get; set; }
现在,当我发布请求时,价格为 NULL 并且在模型状态中显示为无效。
关于c# - Asp.Net 核心 WebApi 模型状态不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43694106/