У меня есть эти модели:
public class Appointment
{
[Required]
public DateTime Start { get; set; }
[Required]
public string UserId { get; set; }
[Required]
public int Duration { get; set; }
[Required]
public Guid VisitingTypeId { get; set; }
[Required]
public int Status { get; set; }
[Required]
public Patient Patient { get; set; }
}
public class Patient
{
[Required]
public string Firstname { get; set; }
[Required]
public string Lastname { get; set; }
[Required]
public string Mail { get; set; }
[Required]
public string UserId { get; set; }
}
А это мой контроллер:
[ApiController]
[Route("api/[controller]")]
public class SchedulerController : Controller
{
[AllowAnonymous]
[HttpPost("book-appointment")]
public async Task<IActionResult> BookAppointmentAsync([FromBody] Appointment appointment)
{
//some logic
}
}
Почему этот звонок работает:
{
"UserId": "c6c988dc-04d7-40dd-a36b-dacd70adf617",
"Patient": {
"Mail": "[email protected]",
"UserId": "c6c988dc-04d7-40dd-a36b-dacd70adf617",
"Lastname": "asd",
"Firstname": "asd"
}
}
Если я удалю идентификатор пользователя, я получу сообщение о том, что требуется идентификатор пользователя, почему это не относится, например, к продолжительности?
Я позвонил в Postman и смог войти в тело метода.
Да, это ожидаемо. Но вы проверили свойство ModelState.IsValid
? Я уверен, что это будет false
Да я проверял и это правда
@Severin.Hersche Все обязательные поля проверяются. Все типы значений были удовлетворены, поскольку все они имеют ненулевые значения по умолчанию. Если вы должны были создать типы, допускающие значение NULL, вы получите ожидаемое поведение.
@Severin.Hersche Я добавил ссылку на документацию. Проверьте это, чтобы получить лучшее понимание.
Все обязательные поля проверяются. Все типы значений были удовлетворены, поскольку все они имеют ненулевые значения по умолчанию, и вы предоставили UserId
Когда класс инициализируется связывателем модели, все эти типы значений будут иметь ненулевые значения и будут удовлетворять атрибуту проверки [Required]
.
Если бы вы сделали их типами, допускающими значение NULL,
[Required]
public DateTime? Start { get; set; }
[Required]
public string UserId { get; set; }
[Required]
public int? Duration { get; set; }
[Required]
public Guid? VisitingTypeId { get; set; }
[Required]
public int? Status { get; set; }
[Required]
public Patient Patient { get; set; }
то вы получите ожидаемое поведение для JSON, показанного в вашем примере.
Ссылка Проверка модели в ASP.NET Core: [Требуется] проверка на сервере
Можете ли вы показать, откуда вы знаете, что «это работает»? Поскольку этот JSON недействителен в соответствии с атрибутами данных на месте