Как добавить возможность для основного контроллера C # .NET обрабатывать расширения к объекту, с которым он имеет дело? - PullRequest
1 голос
/ 11 октября 2019

В настоящее время у меня есть контроллер, который обрабатывает пользовательские объекты в конечной точке / users. Это работает именно так, как мне нужно до этого момента, однако теперь я хотел бы добавить расширение для пользователей, чтобы добавить некоторые атрибуты. Проблема в том, что методы контроллера ожидают пользовательских объектов, поэтому даже если я попытаюсь опубликовать расширенного пользователя, все не базовые пользовательские атрибуты будут отброшены. Есть ли способ, чтобы я мог сделать сообщение более общим, чтобы справиться с обоими?

Для справки - моя текущая подпись сообщения.

[HttpPost]
    public async Task<ActionResult<User>> Post(User item)
    {

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Спасибо за помощь всем. На самом деле я смог решить ее, заставив POST взять объект JObject. В моем случае пользователи расширений гарантированно имеют определенный атрибут, поэтому я проверяю, существует ли он в JObject, а затем связываю его с одним из классов в зависимости от того, является ли он.

0 голосов
/ 11 октября 2019

"Есть ли способ сделать сообщение более общим, чтобы обрабатывать как (User, так и ExtendedUser объекты)"

Выможет проверить, является ли User на самом деле ExtendedUser (используя ключевое слово as для создания нового объекта). Если это ExtendedUser (т. Е. Новый объект не null), то вы можете получить доступ к расширенным свойствам из одного метода, который принимает тип User:

[HttpPost]
public async Task<ActionResult<User>> Post(User user)
{
    // Check if 'user' is an 'ExtendedUser', and if it is, use the extended properties
    var extUser = user as ExtendedUser;
    if (extUser != null)
    {
        // Do something with extUser here
    }

    // Carry on with typical 'User' activities
}

А теперьПриведенный выше пример кода работает точно так же и выдает тот же результат, используя только один метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...