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

问题描述 投票:0回答:2

我有一个 .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 的保护,因此不确定这是否会影响它,但此时我必须自己验证每个操作方法,这不是我想要做的。有人有建议吗?

asp.net-core-2.0 asp.net-core-webapi model-validation
2个回答
16
投票

所以我的问题似乎是因为我使用的是

services.AddMvcCore()
而不是
services.AddMvc()
我必须明确设置
.AddDataAnnotations()
,将其烘焙到
AddMvc()
中。
AddMvcCore()
为您提供简单的框架,您可以添加所需的内容,无论您是否需要,
AddMvc()
都能为您提供一切。

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

0
投票

对于必需的字段验证,请使用

 [BindRequired, Range(1, 10, ErrorMessage = "your error message")]
装饰您的函数,而不是使用
 [Required]

© www.soinside.com 2019 - 2024. All rights reserved.