当请求模型实际无效时,ModelState 有效
ModelState is Valid when the Request Model is actually Invalid
我正在尝试验证 POST 请求中的请求模型 API。但是无论我在请求正文中发送的模型是否正确,ModelState.IsValid
总是显示有效。请求正文无效,因为我更改了字段名称或修改了特定属性的字段类型。
代码如下:
ValidateModelStateAttribute class:
public class ValidateModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
控制器class:
[HttpPost("Search")]
[Produces("application/json")]
public async Task<IActionResult> SearchBook([FromBody]Book searchRequest)
{
if (searchRequest!= null && !ModelState.IsValid)
{
return BadRequest();
}
return new ObjectResult("Book!");
}
图书模型class:
[DataContract]
[Serializable]
public class Book
{
[Required]
[DataMember]
public string BookId;
[Required]
[DataMember]
public string BookName;
}
在Startup.cs class:
services.AddMvc(options =>
{
options.Filters.Add(typeof(ValidateModelStateAttribute));
})
当我在ValidateModelStateAttribute
class中调试时,isValid
字段始终为真,而key
始终为空。
有人知道为什么吗?
为了使 MVC 中的模型绑定工作(以及 JSON.NET,它在幕后用于 JSON 主体),您的 BookId
和 BookName
成员必须是 properties,但他们目前是 fields。它应该是这样的:
public class Book
{
[Required]
public string BookId { get; set; }
[Required]
public string BookName { get; set; }
}
(我还删除了 DataContract
、DataSerializable
和 DataMember
,因为不需要这些。
我正在尝试验证 POST 请求中的请求模型 API。但是无论我在请求正文中发送的模型是否正确,ModelState.IsValid
总是显示有效。请求正文无效,因为我更改了字段名称或修改了特定属性的字段类型。
代码如下:
ValidateModelStateAttribute class:
public class ValidateModelStateAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
context.Result = new BadRequestObjectResult(context.ModelState);
}
}
}
控制器class:
[HttpPost("Search")]
[Produces("application/json")]
public async Task<IActionResult> SearchBook([FromBody]Book searchRequest)
{
if (searchRequest!= null && !ModelState.IsValid)
{
return BadRequest();
}
return new ObjectResult("Book!");
}
图书模型class:
[DataContract]
[Serializable]
public class Book
{
[Required]
[DataMember]
public string BookId;
[Required]
[DataMember]
public string BookName;
}
在Startup.cs class:
services.AddMvc(options =>
{
options.Filters.Add(typeof(ValidateModelStateAttribute));
})
当我在ValidateModelStateAttribute
class中调试时,isValid
字段始终为真,而key
始终为空。
有人知道为什么吗?
为了使 MVC 中的模型绑定工作(以及 JSON.NET,它在幕后用于 JSON 主体),您的 BookId
和 BookName
成员必须是 properties,但他们目前是 fields。它应该是这样的:
public class Book
{
[Required]
public string BookId { get; set; }
[Required]
public string BookName { get; set; }
}
(我还删除了 DataContract
、DataSerializable
和 DataMember
,因为不需要这些。