Состояние модели Всегда истинно, даже если обязательное поле не отправлено

Я просто вызываю API и передаю объект в качестве параметра, и все работает нормально. Но затем я хотел проверить модель, прежде чем двигаться дальше, поэтому я просто написал [Обязательно] над полями, которые я всегда хотел заполнить. МОДЕЛЬ

 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
        }

Таким образом, я ожидал, что состояние модели будет ложным, когда я не отправлю объект Id, когда я вызываю API JSON.

{

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

но все равно правда. Я знаю, что ядро ​​.Net выделяет 0 для значения int, когда оно равно нулю, но как я могу проверить его тогда? Каков обходной путь для этого?


person Umer    schedule 27.05.2019    source источник


Ответы (2)


Просто замените эту строку:

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

С этим:

[Required]
public int? FacilityId { get; set; }
person Elyas Esna    schedule 27.05.2019

Атрибут Required хорошо работает для ссылочных объектов, допускающих значение NULL. Для примитивов при создании экземпляра для FacilityId назначается значение по умолчанию (в данном случае 0 для int), поэтому Required не будет работать. Если вы сделаете FacilityId как nullable int, тогда атрибут Required будет работать нормально.

[Required]
public int? FacilityId { get; set; }
person Prakash G. R.    schedule 27.05.2019