Модель имеет значение null, когда конечная точка попадает через почтальона

Похоже, что данные, которые я передаю через почтальона, не соответствуют модели, которая находится в методе контроллера. Я реализую конечную точку веб-API в приложении .Net для одновременного сохранения нескольких загрузок файлов. Пользователь мог выбрать несколько файлов и для каждого файла выбрать тип документа и дату. Есть две таблицы (родительская и дочерняя), в которые вставляются записи. Родительской таблицей в моем примере является таблица DOCUMENT, а дочерние записи хранятся в таблице MANAGERSTREGY_DOCUMENT. Что-то не так с моей структурой JSON?

Модель просмотра

 public class DocumentUploadCreateViewModel
    {
        public int ManagerStrategyId { get; set; }
        public List<DocumentUploadCreateDetailsViewModel> DocumentUploadCreateDetailsViewModel = new List<DocumentUploadCreateDetailsViewModel>();
    }


 public class DocumentUploadCreateDetailsViewModel
    {
        public string Name { get; set; }
        public int DocumentTypeId { get; set; }
        public DateTime? DocumentDate { get; set; }
        public byte[] DocumentContent { get; set; }

    }

Код контроллера

[HttpPost]
        [SkipTokenAuthorization]
        [Route("api/documentupload/create")]
        public IHttpActionResult Create(DocumentUploadCreateViewModel model)
        {
            var mgrStrategyDocument = new MANAGERSTRATEGY_DOCUMENT();
        var mgrDocumentService = GetService<DOCUMENT>();
        var mgrStrategyDocumentService = GetService<MANAGERSTRATEGY_DOCUMENT>();

        if (model != null)
        {
            foreach (var obj in model.DocumentUploadCreateDetailsViewModel)
            {
                var mgrDocument = new DOCUMENT
                {
                    DOCUMENT_TYPE_ID = obj.DocumentTypeId,
                    DOCUMENT_DATE = obj.DocumentDate,
                    NAME = obj.Name
                };
                mgrDocument = mgrDocumentService.Create(mgrDocument);


                var mangerStrategyDocumentService = GetService<MANAGERSTRATEGY_DOCUMENT>();
                var mgrStrategyDocument1 = new MANAGERSTRATEGY_DOCUMENT()
                {
                    DOCUMENT_ID = mgrDocument.ID,
                    MANAGERSTRATEGY_ID = model.ManagerStrategyId

                };
                mgrStrategyDocument = mgrStrategyDocumentService.Create(mgrStrategyDocument1);
            }

        }
        return Ok(mgrStrategyDocument);

    }
    }

Почтальон

http://localhost:56888/api/documentupload/create


JSON

    {
    "ManagerStrategyId" : 5508,

    [
        "Name" : "x2",
        "DocumentTypeId" : 2,
        "DocumentDate" : "15/04/2010",
        "DocumentContent" : [71,107,98]
    ],

        [
        "Name" : "x3",
        "DocumentTypeId" : 3,
        "DocumentDate" : "15/04/2010",
        "DocumentContent" : [71,107,98]
    ],

        [
        "Name" : "x4",
        "DocumentTypeId" : 4,
        "DocumentDate" : "15/04/2010",
        "DocumentContent" : [71,107,98]
    ]
}

Вероятно, что-то зарегистрировано в свойстве ModelState контроллера?

Sam 19.06.2019 19:12

Извините, я вас не понял?

Tom 19.06.2019 19:20

Извините за рваную фразу! Если это контроллер WebAPI/MVC, у вас будет свойство ModelState, которое обычно регистрирует некоторую ошибку, когда модель имеет значение null — docs.microsoft.com/en-us/dotnet/api/…

Sam 19.06.2019 19:23

Это ВЕБАПИ. Я попытался отладить ModelState, и он показывает Count: 1 IsReadOnly: false IsValid: false Ключи: Count = 1 Values: Count = 1 Представление результатов: расширение представления результатов перечислит IEnumerable

Tom 19.06.2019 19:25

Да, 1 элемент в этом списке будет вашим сообщением об ошибке. Разверните перечисляемое в представлении отладки, и вы его увидите.

Sam 19.06.2019 19:27

Это сообщение об ошибке Недопустимый символ идентификатора свойства: [. Путь «ManagerStrategyId», строка 4, позиция 1.

Tom 19.06.2019 21:40

Давайте продолжить обсуждение в чате.

Tom 19.06.2019 21:51

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

Tom 19.06.2019 22:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
8
176
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В вашем JSON отсутствует ключ для списка, а также синтаксис списка кажется неправильным. Попробуйте следующее:

{
"ManagerStrategyId":5508,
"DocumentUploadCreateDetailsViewModel":[
  {
     "Name":"x2",
     "DocumentTypeId":2,
     "DocumentDate":"2010-04-15",
     "DocumentContent":[
        71,
        107,
        98
     ]
  },
  {
     "Name":"x3",
     "DocumentTypeId":3,
     "DocumentDate":"2010-04-15",
     "DocumentContent":[
        71,
        107,
        98
     ]
  },
  {
     "Name":"x4",
     "DocumentTypeId":4,
     "DocumentDate":"2010-04-15",
     "DocumentContent":[
        71,
        107,
        98
     ]
  }
]
}

Выглядит хорошо, за исключением того, что DocumentDate становится нулевым. Его поле DateTime в модели

Tom 19.06.2019 22:22

@Tom Я предполагаю, что DateTime должен быть стандартом ISO 8601: формат «2012-03-19T07:22Z». Я обновил ответ в формате ISO.

gpro 19.06.2019 22:55

Другие вопросы по теме