Я пытаюсь создать общий сложный объект для моих моделей (параметры действия) и использовать его во многих местах.
Вот пример кода:
[HttpGet("/api/values")]
public ActionResult<string> Get([FromQuery] MyModel model) {
var sb = new StringBuilder();
sb.AppendLine(model.Id);
sb.AppendLine($"{model.Id}-{model.Generated?.DateStart}-{model.Generated?.DateEnd}");
sb.AppendLine($"{model.Id}-{model.Reference?.DateStart}-{model.Reference?.DateEnd}");
return sb.ToString();
}
public class MyModel {
public string Id { get; set; }
public DateInfo Generated { get; set; } = new DateInfo();
public DateInfo Reference { get; set; } = new DateInfo();
}
public class DateInfo {
public DateTime? DateStart { get; set; }
public DateTime? DateEnd { get; set; }
public RelativeTime? RelativeTime { get; set; }
}
Представьте, что класс DateInfo будет иметь валидацию и общие свойства, которые будут использоваться во многих моделях.
Добавление [FromQuery(Name = "Something")]
к вложенным свойствам делает хитрость, но не позволяет иметь два вложенных свойства одного типа.
UDPATE:
Я понимаю, что добавление полностью определенного имени свойства ( ... / values? Id = 1 & Generated.DateInfo = 2 & Reference.DateInfo = 3 ) заставит его работать, но это будет очень уродливый способ вызывать любой API. Дефисы - это путь, а не точки.
Я хотел бы отобразить привязку так же, как и для сопоставления обычного свойства.
Как этого добиться?