Как я могу разрешить ситуацию, когда один 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
Привет Ричард,
Обе подписи были идентичны. Проблема заключалась в отсутствующем атрибуте на уровне класса.
Нем.