模型验证 .Net Core 2.0 Web Api 不工作
Model Validation .Net Core 2.0 Web Api Not working
我有一个 .Net Core 2.0 Web Api。我有各种模型,这些模型在属性上具有验证属性:
[Required]
public short? Quantity { get; set; }
我有一个检查模型状态的 ActionFilter:
if (!context.ModelState.IsValid)
context.Result = new BadRequestObjectResult(context.ModelState);
无论我做什么,当我故意省略所需的属性时,ModelState 总是返回有效。我的控制器标记为:
[Produces("application/json")]
模型正在正确反序列化,我的操作方法中的模型参数标有 [FromBody]。它似乎没有 运行 任何验证(标准或自定义)。我看过 this answer and this 和其他几个,但我就是想不通我错过了什么。我的 API 受 IdenityServer 4 保护,所以不确定它是否发挥作用,但此时我必须自己验证每个操作方法,这不是我想要做的。有人有建议吗?
所以我的问题似乎是因为我使用的是 services.AddMvcCore()
而不是 services.AddMvc()
我必须明确设置 .AddDataAnnotations() ,这是在 AddMvc 中嵌入的。 AddMvcCore() 给你简单的骨头,你可以在 AddMvc 给你一切的地方添加你需要的东西,不管你需要与否。希望这对其他人有帮助。
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters()
.AddApiExplorer()
.AddDataAnnotations()
.AddMvcOptions(opt =>
opt.Filters.Add<RequestFilterAttribute>());
对于必填字段验证,请使用 [BindRequired, Range(1, 10, ErrorMessage = "your error message")]
修饰您的函数,而不是使用 [Required]
我有一个 .Net Core 2.0 Web Api。我有各种模型,这些模型在属性上具有验证属性:
[Required]
public short? Quantity { get; set; }
我有一个检查模型状态的 ActionFilter:
if (!context.ModelState.IsValid)
context.Result = new BadRequestObjectResult(context.ModelState);
无论我做什么,当我故意省略所需的属性时,ModelState 总是返回有效。我的控制器标记为:
[Produces("application/json")]
模型正在正确反序列化,我的操作方法中的模型参数标有 [FromBody]。它似乎没有 运行 任何验证(标准或自定义)。我看过 this answer and this
所以我的问题似乎是因为我使用的是 services.AddMvcCore()
而不是 services.AddMvc()
我必须明确设置 .AddDataAnnotations() ,这是在 AddMvc 中嵌入的。 AddMvcCore() 给你简单的骨头,你可以在 AddMvc 给你一切的地方添加你需要的东西,不管你需要与否。希望这对其他人有帮助。
services.AddMvcCore()
.AddAuthorization()
.AddJsonFormatters()
.AddApiExplorer()
.AddDataAnnotations()
.AddMvcOptions(opt =>
opt.Filters.Add<RequestFilterAttribute>());
对于必填字段验证,请使用 [BindRequired, Range(1, 10, ErrorMessage = "your error message")]
修饰您的函数,而不是使用 [Required]