Ger Hayden Ответов: 2

Как я могу разрешить ситуацию, когда один API принимает объект, а другой-нет?


У меня их две .API NET Core 2.2 оба обрабатывают один и тот же объект в одном и том же рабочем процессе (поэтому у них есть один и тот же токен аутентификации). Первый ведет себя так, как и ожидалось, второй отказывается стрелять, выдавая ошибку: Связанные с моделью сложные типы не должны быть абстрактными или типами значений и должны иметь конструктор без параметров.

Это и есть подпись
[Authorize]
 [HttpPost("UpdateRegistration")]
 public async Task<IActionResult> UpdateRegistration(CUserDetails userDetails)
 {...}


Это оскорбительный класс:
   public class CUserDetails
    {

        #region CONSTRUCTORS

        /// <summary>
        /// Primary constructor
        /// </summary>
        /// <param name="arg_person">The details of the person to register</param>
        /// <param name="arg_username">the username to be assigned when creating the user</param>
        public CUserDetails(CPersonMasterBase arg_person, string arg_username)
        {
            this.person = arg_person;
            this.username = arg_username;

        }

        #endregion


        #region PUBLIC METHODS

        public string GetUsername()
        {
            return username;
        }

        public CPersonMasterBase GetPerson()
        {
            return person;
        }

        #endregion


        #region PUBLIC PROPERTIES
        public string username { get; set; }

        public CPersonMasterBase person { get; set; }

        #endregion
    }
}


Простой ответ-дать ему конструктор без параметров, но тогда я не узнаю, почему он работает в одном случае, но не в другом.

Что я уже пробовал:

До сих пор просто входил с отладчиком и изучал конструктор контроллера. Не нашел ничего, что указывало бы на причину. Я провел поиск userDetails в обоих решениях, но не нашел ничего, что могло бы подсказать, почему они ведут себя по-разному.

По крайней мере, одно онлайн-решение просто добавляет конструктор без параметров, но это, как я уже упоминал выше, не объясняет разницу в поведении.

Richard Deeming

Какова подпись того, который работает, и чем он отличается от того, который не работает?

Ger Hayden

Привет Ричард,
Обе подписи были идентичны. Проблема заключалась в отсутствующем атрибуте на уровне класса.

Нем.

2 Ответов

Рейтинг:
10

Ger Hayden

Понял.

У класса-нарушителя отсутствовал атрибут [ApiController]. например

[Route("CMDS/[Controller]")]
  [ApiController]
  public class DistributeController : ControllerBase


Рейтинг:
0

AFell2

Является ли класс CPersonMasterBase, который вы используете в качестве свойства "person", абстрактным классом? Если нет, то есть ли у него также конструктор без параметров?