Как моделировать привязку сегмента пути к свойству объекта

У меня есть следующий метод контроллера, который принимает команду как модель изменения, переданную от клиента.

    [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());
    });
    
Другие вопросы по тегам