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

时间:2019-05-27 06:26:58

标签: json api validation .net-core modelstate

我只是调用一个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值,但是我如何才能对其进行验证?对此有何解决方法?

2 个答案:

答案 0 :(得分:1)

Required属性适用于可为空的引用对象。对于基元,创建实例时,会将默认值(在本例中为int)分配给FacilityId,因此Required无效。如果将FacilityId设置为可为null的int,则Required属性将正常工作。

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

答案 1 :(得分:0)

只需替换此行:

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

与此:

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