Похоже, что данные, которые я передаю через почтальона, не соответствуют модели, которая находится в методе контроллера. Я реализую конечную точку веб-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]
]
}
Извините, я вас не понял?
Извините за рваную фразу! Если это контроллер WebAPI/MVC, у вас будет свойство ModelState, которое обычно регистрирует некоторую ошибку, когда модель имеет значение null — docs.microsoft.com/en-us/dotnet/api/…
Это ВЕБАПИ. Я попытался отладить ModelState, и он показывает Count: 1 IsReadOnly: false IsValid: false Ключи: Count = 1 Values: Count = 1 Представление результатов: расширение представления результатов перечислит IEnumerable
Да, 1 элемент в этом списке будет вашим сообщением об ошибке. Разверните перечисляемое в представлении отладки, и вы его увидите.
Это сообщение об ошибке Недопустимый символ идентификатора свойства: [. Путь «ManagerStrategyId», строка 4, позиция 1.
Давайте продолжить обсуждение в чате.
JSON кажется недействительным при помещении его в инструмент форматирования JSON. Не уверен, в чем проблема
В вашем 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 Я предполагаю, что DateTime должен быть стандартом ISO 8601: формат «2012-03-19T07:22Z». Я обновил ответ в формате ISO.
Вероятно, что-то зарегистрировано в свойстве ModelState контроллера?