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

Я просто вызываю 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, когда оно равно нулю, но как я могу его проверить тогда? Что для этого нужно?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
0
65
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

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

С этим:

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

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

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

Другие вопросы по теме