模型状态即使未发送必填字段也始终为真

Model State Always true even when the required field is not sent

我只是调用 API 并将一个对象作为参数传递,一切正常。但后来我想在继续之前验证模型,所以我只是在我一直想要填写的字段上方写下 [Required] 。 型号

public class Consent
{
    public Consent()
    {
       
    }
    public int Id { get; set; }
    [Required]
    public int FacilityId { get; set; }
    public string Heading { get; set; }
    public string Description { get; set; }
}

并像这样在控制器中验证模型状态

public ActionResult<int> AddConsent(Consent consent)
{
    if(!ModelState.IsValid){
        throw new CustomException("000-0000-000", "Validation failed");
        
    }
    //Further Code
}

据此,当我调用 api 时不发送 facilityId 时,我预计模型状态为 false JSON

{
    "heading": "HeadingFromPostman5",
    "description": "DiscriptiomFromPostman5"
}

但它仍然是真的。我知道 .Net 核心在 null 时将 0 分配给 int 值,但我该如何验证它呢?解决这个问题的方法是什么?

只需替换这一行:

[Required]
public int FacilityId { get; set; }

有了这个:

[Required]
public int? FacilityId { get; set; }

Required 属性适用于可为 null 的引用对象。对于原语,在创建实例时,默认值(在本例中为 0 表示 int)分配给 FacilityId,因此 Required 将不起作用。如果您将 FacilityId 设置为可为空的 int,则 Required 属性将正常工作。

[Required]
public int? FacilityId { get; set; }