模型验证.Net Core 2.0 Web Api不起作用

时间:2018-08-04 19:59:25

标签: asp.net-core-2.0 asp.net-core-webapi model-validation

我有一个.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答案,这个one以及其他几个答案,但我只是无法弄清自己所缺少的内容。我的API受IdenityServer 4保护,因此不确定它是否起作用,但此时我必须自己验证每个操作方法,而这并不是我想要做的。有人有建议吗?

2 个答案:

答案 0 :(得分:9)

所以我的问题似乎是因为我使用的是services.AddMvcCore()而不是services.AddMvc(),我必须显式设置.AddDataAnnotations()并将其烘焙到AddMvc中。 AddMvcCore()为您提供了基本信息,并添加了所需的内容,而无论您是否需要,AddMvc都为您提供了所有内容。希望这对其他人有帮助。

services.AddMvcCore()
                .AddAuthorization()
                .AddJsonFormatters()
                .AddApiExplorer()
                .AddDataAnnotations()
                .AddMvcOptions(opt =>
                    opt.Filters.Add<RequestFilterAttribute>());

答案 1 :(得分:0)

对于必填字段验证,请使用 [BindRequired, Range(1, 10, ErrorMessage = "your error message")]而不是 [Required]装饰您的功能