Контроллер с объектом generi c в dotnet - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь создать шаблон CQRS в моем ASP. NET API. Я сделал несколько диспетчеров для обработки всех моих командных объектов. Теперь я хочу иметь общий c контроллер с одним методом с именем command, который может принимать ЛЮБОЙ объект в теле. Так что я могу использовать его со своим диспетчером. Я не уверен, как это сделать.

Может быть, что-то вроде этого?

public class CommandController<TCommand> : Controller where TCommand : class
{
   [HttpPost]
   public async Task<IActionResult> Command([FromBody]TCommand command)
   {
   }
}

Маршрут должен быть / api / command / genericCommand

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Насколько я знаю, мы не смогли добиться принятия ЛЮБОГО объекта в теле. Asp. net ядро ​​по умолчанию обеспечивает привязку модели для привязки тела запроса к модели.

Но если мы хотим десериализовать тело запроса в модель, нам нужно знать формат модели и тогда мы могли бы использовать отражение для десериализации тела запроса в модель.

Нам также нужно знать формат тела и имя модели тела, например json, xml или еще, и тогда мы могли бы построить привязка пользовательской модели для привязки к другой модели.

0 голосов
/ 05 августа 2020
public class CommandController : Controller
{
    [HttpPost]
    public async Task<IActionResult> Command([FromBody]CommonBase command)
    {
        switch (command)
        {
            case Derived1 d1:
                // ...
                break;
            case Derived1 d2:
                // ...
                break;
            // ...
            default:
                throw new InvalidOperationException();
        }
        // ...
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...