Как моделировать привязку сегмента пути к свойству объекта
У меня есть следующий метод контроллера, который принимает команду как модель изменения, переданную от клиента.
[HttpPut]
[Route("api/features/{name}")]
public async Task<IActionResult> PutFeatureValueAsync(
string name,
[FromBody] SetFeatureCommand command,
CancellationToken token)
{
command.FeatureName = name;
await mediator.Send(command, token).ConfigureAwait(false);
return Ok();
}
Проблема в том, что мне нужно вручную скопировать свойство FeatureName в объект команды, если я хочу сохранить {имя} в URL. Другая проблема заключается в том, что я не могу правильно выполнить проверку, если FeatureName не установлен во время привязки модели.
Что было бы лучшим способом иметь сегмент {name} пути для автоматической привязки модели к свойству FeatureName команды.
1 ответ
Это может быть достигнуто с помощью привязки пользовательской модели. Я бы порекомендовал начать с прочтения документации по привязке моделей, а затем заглянуть в тему привязки пользовательских моделей. Здесь объясняются как доступные подходы, так и примеры, показывающие почти то, что вам нужно:
- привязка пользовательской модели (через собственную реализацию
IModelBinder
) Этот подход требует модификации вашей модели: вам нужно будет применить[ModelBinder]
приписать к вашемуSetFeatureCommand
учебный класс пользовательский поставщик связывателя модели (через собственную реализацию
IModelBinderProvider
). Вот как реализованы встроенные связующие структуры. Затем провайдер регистрируется с использованием опций промежуточного программного обеспечения MVC:services.AddMvc(options => { // add custom binder to beginning of collection options.ModelBinderProviders.Insert(0, new OwnBinderProvider()); });