下面是Web期间使用的Model类。如您所见,Id字段将根据需要进行注释。
public class Model
{
    [Required]
    public Guid Id { get; set; }
}空气污染指数的职位如下
[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吗?
发布于 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-api,decimal属性有类似问题的一个示例。
需要理解的关键区别是,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。
https://stackoverflow.com/questions/40620781
复制相似问题