Я новичок в разработке .Net, поэтому я решил начать с курса .Net Core.Все идет нормально;Я пытаюсь создать API, который требует наличия определенных ключей в объекте JSON.Если хотя бы один из ключей отсутствует, я ожидаю, что он будет недействительным.
[HttpPost("new")]
public IActionResult CreateGPSPoint([FromBody] ModelExample dataObject)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
}
IsValid возвращает true, однако, даже если я опускаю некоторые или все ключи в полезной нагрузке JSON, которыеЯ отправляю.При проверке те ключи, которые отсутствовали, устанавливаются в 0 в свойствах последующей модели;так вот как выглядит моя модель.
public class ModelExample
{
[Required(AllowEmptyStrings = false)]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public float Height{ get; set; }
[Required(AllowEmptyStrings = false)]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public decimal Width{ get; set; }
[Required(AllowEmptyStrings = false)]
[DisplayFormat(ConvertEmptyStringToNull = false)]
public int Depth{ get; set; }
//Populated by the entity later, but feel free to critique nevertheless
public int Id { get; set; }
}
Обратите внимание, что, поскольку этот вопрос поднимался несколько раз в другом месте, я попробовал различные комбинации Required (AllowEmptyStrings = false) и DisplayFormat (ConvertEmptyStringToNull = false) - я предполагал, что они будут проверены, когда объект JSON будет «преобразован (?)» В модель;однако результат всегда был одинаковым.
Изначально я думал, что это может быть проблема с Automapper (который я использую), но проверки проходят до того, как произойдет любое сопоставление сущности / модели.
Те конкретные поля, которые я пропустил, также никогда не могут быть нулевыми, поскольку никакое значение не будет установлено равным 0 (и в любом случае нулевое значение все равно будет действительным).
Я думал, чтопросто интерпретируйте данные как объект JSON (вместо ModelExample) и убедитесь, что эти ключи уже существуют в моей логике контроллера (что-то вроде Rails 'dataObject & .dig [: key] "- но я не знаю, так ли этовозможно или уместно, или если есть какая-то тактика .Net, которую я пропустил.
Мой вопрос на самом деле: что-то делается неправильно или отсутствует в вышеприведенном?
МногиеЗаранее благодарим, если кто-нибудь может рассказать о том, как работает вышеперечисленное!