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