Я пытаюсь передать вызов ajax конечной точке REST.Я установил DTO, и все параметры работают правильно, кроме двух, которые являются IEnumerbles.
DTO выглядит как
public string title{ get; set; }
public IEnumerable<int> idsToSend{ get; set; }
public IEnumerable<IFormFile> AdditionalFiles { get; set; }
Метод контроллера выглядит как
[FromForm] myGreatDTO dto
Когда я отправляю запрос, в моем сетевом инспекторе я вижу, что все 3 свойства действительно включены в запрос, а заголовок типа контента имеет значение multipart / form-data
Когда я ставлю точку останова вКонтроллер, я вижу DTO, но только заголовок (единственная строка) установлен.И массив чисел, и массив IFormFiles установлены на «Count = 0»
Я пробовал поискать в Google, но ничего не могу найти по этому поводу.Спасибо за любое направление.
РЕДАКТИРОВАТЬ: Вот запрос от сетевого инспектора chromes в соответствии с просьбой:
Content-Disposition: form-data; name="AdditionalFiles"
[object File]
------WebKitFormBoundaryun80WvPO3VUW6BU8
Content-Disposition: form-data; name="idsToSend"
2,3
------WebKitFormBoundaryun80WvPO3VUW6BU8
Content-Disposition: form-data; name="title"
a title
И заголовок типа содержимого
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryun80WvPO3VUW6BU8
РЕДАКТИРОВАТЬ 2: И проанализированная версия из Chrome Inspector
title: a title
idsToSend: 2,3
AdditionalFiles: [object File]
РЕДАКТИРОВАТЬ 3: я получил idsToSend для работы, вручную составляя эти значения.
Таким образом, вместо
requestObject.append('idsToSend', myvaluesarray);
это цикл, который выдает
requestObject.append('idsToSend[i]', myvaluesarray[i]);
Так что это здорово.
Однако, делать то же самое с дополнительными файлами не получается.Бэкэнд читает значение как «null».
EDIT 4
Вот внешний интерфейсный метод, который отправляет этот запрос как requestd
sendRequest(dto) {
let url = `${this._profileService.root}/document`;
let requestObject = new FormData();
//fill in the base keys
requestObject.append('Title', dto.Title);
for (let i = 0; i < dto.ids.length; i++) {
requestObject.append(`idsToSend[${i}]`, dto.ids[i].toString());
}
for (let j = 0; j < dto.AdditionalFiles.length; j++) {
requestObject.append(`AdditionalFiles[${j}]`, dto.AdditionalFiles[j]);
}
return this._http.post(url, requestObject).catch(this.errorHandler);
}