为了账号安全,请及时绑定邮箱和手机立即绑定

当请求模型实际无效时,ModelState 有效

当请求模型实际无效时,ModelState 有效

C#
UYOU 2022-11-22 15:12:24
我正在尝试验证 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


查看完整回答
反对 回复 2022-11-22
  • 1 回答
  • 0 关注
  • 70 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信