В .NET Core у меня есть модель, которая выглядит следующим образом.
public class Home
{
[Required]
public int Number {get;set;}
public Address Address {get;set;} // This is not required
}
public class Address
{
[Required]
public string Street {get;set;}
public IFormFile Picture {get;set;}
}
В методе контроллера, который выглядит следующим образом
[HttpPost]
public string AddHomes([FromForm]List<Home> homes)
{
if(!ModelState.IsValid)
{
return BadRequest();
}
// Do some saving
return Ok();
}
В запросе формы, который выглядит следующим образом
homes.Index: 0
homes[0].number: 1
В .NET Core2.2 первый дом в списке недействителен.Он работал в .NET Core 2.1
Я хочу, чтобы атрибут [Обязательный] проверялся только в том случае, если Адрес не null
.Таким образом, дом может иметь либо адрес с улицей, либо вообще не иметь адреса.
Это достижимо в .NET Core 2.2?
Примечание. Обновлен пример для воспроизведения ошибки.Кажется, включение IFormFile заставляет класс адреса инициализироваться сам.
{
"errors": {
"homes[0].Address.Street": [
"The Street field is required."
]
},
"title": "One or more validation errors occurred.",
"status": 400,
"traceId": "80000009-0003-ff00-b63f-84710c7967bb"
}
Некоторое время назад я также открыл проблему для этого: https://github.com/aspnet/AspNetCore/issues/9321, если кто-то хочет продолжить.