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

我正在尝试验证 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始终为空。


任何人都知道为什么?


UYOU
浏览 94回答 1
1回答

慕侠2389804

为了使 MVC 中的模型绑定起作用(以及 JSON.NET,它在幕后用于 JSON 主体),您的BookId和BookName成员必须是properties,但它们目前是fields。它应该是这样的:public class Book{&nbsp; &nbsp; [Required]&nbsp; &nbsp; public string BookId { get; set; }&nbsp; &nbsp; [Required]&nbsp; &nbsp; public string BookName { get; set; }}(我也删除了, DataContract因为不需要这些)。DataSerializableDataMember
打开App,查看更多内容
随时随地看视频慕课网APP