首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模型验证不能工作的原因

模型验证不能工作的原因
EN

Stack Overflow用户
提问于 2016-11-15 22:22:00
回答 1查看 2.3K关注 0票数 3

下面是Web期间使用的Model类。如您所见,Id字段将根据需要进行注释。

代码语言:javascript
运行
复制
public class Model
{
    [Required]
    public Guid Id { get; set; }
}

空气污染指数的职位如下

代码语言:javascript
运行
复制
[HttpPost]
public IActionResult Post([FromBody]Model value)
{
    if (!ModelState.IsValid)
        return BadRequest();

    Model newModel = new Model() { Id = value.Id };
    return Ok(newModel);
}

在阳光明媚的日子里,这就是我所看到的。都很好

在这里输入图像描述

下雨天,当我没有身份证的时候,我就会跟上。在这里输入图像描述

在第二个示例中,如果没有提供必需的字段,那么不应该返回一个BadRequest,而不是返回一个带有00000000-0000-0000-000000000000的无效id guid的200吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-15 23:54:23

使用所需的注释

在Web文档中,您的问题称为“下发”。

问题是Guid有一个默认值,所以当不提供值时,就用默认值初始化它.然后满足Required约束。

为了防止这种情况,反直觉地使用Guid使Guid?为空.

然后,如果没有提供该值,反序列化程序将将该值设置为null,这将导致违反Required约束。

如果提供了这个值,它就会被设置,并且一切都会很好。

有关更多详细信息,请参见https://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in-aspnet-web-apidecimal属性有类似问题的一个示例。

需要理解的关键区别是,Guid.Empty实际上是一个有效的Guid。区分提供Guid (它是空的)和根本不提供Guid的唯一方法是使其为空,因此null = not提供,而null=用户提供空Guid。

使用自定义注释

如果您真的不想使Guid为空,则需要考虑对于“正常”值类型(例如整数)会做什么。与其要求它,不如使用Range属性并指定它必须是> 0

类似地,对于Guid,理想情况下,您将拥有一个属性,它只需测试它是否为!= Guid.Empty

有关创建自定义验证属性的指导,请参见https://learn.microsoft.com/en-us/aspnet/core/mvc/models/validation#custom-validation

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40620781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档