【发布时间】:2019-08-23 02:29:00
【问题描述】:
我正在尝试在 API 的 POST 请求中验证请求模型。但无论我在请求正文中发送的模型是否正确,ModelState.IsValid 始终显示有效。无效的请求正文,因为我更改了字段名称或修改了特定属性的字段类型。
代码如下:
ValidateModelStateAttribute 类:
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 始终为空。
有人知道为什么吗?
【问题讨论】:
-
@KirkLarkin 我认为
BookId和BookName是属性.. 我应该如何更改代码? -
我会添加一个答案。
-
是否有任何演示可以重现您的问题?我用
netcoreapp2.1web api做了一个测试,它工作正常。您是如何发送请求的? -
我只是将请求正文放在正文部分并将其设置为 json/application.. 我必须删除
[required]属性,因为它们都不是必需的.. 这就是为什么它不工作?无论类型有多么错误,它总是显示context.ModelState.IsValid为真..
标签: c# asp.net-core asp.net-core-webapi model-binding modelstate