Я использую .net core sdk v3.0.101
Сценарий
Входящий запрос POST будет содержать коллекцию типов объектов в своем теле, используя следующую структуру:
{
"object-collection": [{
"type": "ClassA",
"properties": [
"name": "First object type",
"code": "CODE_1"
]
},
{
"type": "ClassB",
"properties": [
"name": "Second object type",
"tag": "TAG_1",
"is-valid": "true"
]
}
]
}
Важным моментом здесь является то, что на практике в полезную нагрузку запроса может быть включено около 100 типов.
У меня есть модели, определенные для каждой type
, указанной в запросе. выше они выглядят так:
public class ClassA
{
[Required]
public string Name { get; set; }
public string Code { get; set; }
}
public class ClassB
{
[Required]
public string Name { get; set; }
[MaxLength(255)]
public string Tag { get; set; }
public bool IsValid { get; set; }
}
Цель
Я пытаюсь найти лучший способ привязать тело запроса к этим классам, чтобы я мог получить Преимущества атрибутов проверки модели
То, что я пробовал
Я впервые посмотрел на использование Пользовательская привязка модели , но я этого не сделал Мне кажется, что это был правильный путь, так как я не мог понять, как можно связать модель на основе значения атрибута в теле запроса
Я думал только о привязке к очень простой модели. примерно так:
public class PayloadModel
{
[Required]
public string ObjectCollection { get; set; }
}
Тогда циклически просматривая данные JSON, чтобы найти класс по значению атрибута type
, а затем связывается с новым экземпляром класса.
public async Task<IActionResult> CreateObjectCollection([FromBody]PayloadModel objectCollection)
{
// Send a command off to deserialize the JSON string into the various objects
// Do other stuff
}
Вопросы
- Можно ли использовать привязку пользовательской модели для достижения того, что я описал?
- Если нет, есть ли более чистый способ сделать это, который я не рассмотрел?
Заранее спасибо - дайте мне знать, если я могу предоставить больше информации