【问题标题】:Model Validation .Net Core 2.0 Web Api Not working模型验证.Net Core 2.0 Web Api 不工作
【发布时间】:2019-01-12 07:44:48
【问题描述】:

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

【问题讨论】:

  • 您已将您的 Quantity 定义为可空短,并将其标记为必需,因此导致冲突。将 Quantity 更改为 short 数据类型,然后尝试。
  • @MohsinMehmood 感谢您的回复,但如果您查看我提供的链接并查看 Json 反序列化整数时的代码,它将反序列化为默认值 (0)。由于这是一个有效的 int 值,它将通过验证。因此,为什么我使我需要的变量可以为空。无论如何,如果我将其更改为 int 仍然验证为有效。

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


【解决方案1】:

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

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

【讨论】:

  • 很高兴我找到了这个。在这堵墙上撞了一个小时! +1
  • 绝对有帮助。非常感谢。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2019-03-26
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2018-05-31
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    • 2018-03-26
    相关资源
    最近更新 更多