我正在尝试验证 API 的 POST 请求中的请求模型。但是ModelState.IsValid无论我在请求正文中发送的模型是否正确,始终显示有效。请求正文无效,因为我更改了字段名称或修改了特定属性的字段类型。这是代码:验证模型状态属性类:public class ValidateModelStateAttribute : ActionFilterAttribute{ public override void OnActionExecuting(ActionExecutingContext context) { if (!context.ModelState.IsValid) { context.Result = new BadRequestObjectResult(context.ModelState); } }}控制器类:[HttpPost("Search")][Produces("application/json")]public async Task<IActionResult> SearchBook([FromBody]Book searchRequest){ if (searchRequest!= null && !ModelState.IsValid) { return BadRequest(); } return new ObjectResult("Book!");}图书模型类:[DataContract][Serializable]public class Book{ [Required] [DataMember] public string BookId; [Required] [DataMember] public string BookName; }在 Startup.cs 类中: services.AddMvc(options => { options.Filters.Add(typeof(ValidateModelStateAttribute)); })当我在ValidateModelStateAttribute课堂上调试时,isValid字段始终为真,并且key始终为空。任何人都知道为什么?
1 回答
慕侠2389804
TA贡献1719条经验 获得超6个赞
为了使 MVC 中的模型绑定起作用(以及 JSON.NET,它在幕后用于 JSON 主体),您的BookId和BookName成员必须是properties,但它们目前是fields。它应该是这样的:
public class Book
{
[Required]
public string BookId { get; set; }
[Required]
public string BookName { get; set; }
}
(我也删除了, DataContract因为不需要这些)。DataSerializableDataMember
- 1 回答
- 0 关注
- 87 浏览
添加回答
举报
0/150
提交
取消