Наконец я нашел решение:
Прежде всего, я изменил свои модели, я удалил следующую строку из ChildVM:
public IFormFile Image { get; set; }
и добавил следующую строку в MainVM:
public List<IFormFile> ListImages{ get; set; }
Я сделал это, потому что обнаружил, что в Asp.net Core 2.2 есть какая-то ошибка, из-за которой, если мы выберем тип IFormFile в подмодели, Asp.net Core 2.2 начнет зависать (подробности в ссылке ниже):
https://github.com/aspnet/AspNetCore/issues/4802
Теперь на стороне клиента я изменил модели соответственно, и изменения в обслуживании следующие:
addData(mydata: MainVM, logo: File, myImages: File[]): Observable<MainVM> {
const formData: FormData = new FormData();
formData.append('Logo', logo, logo.name);
this.buildFormData(formData, mydata, null);
if (myImages && myImages.length > 0) {
for (var i = 0; i < myImages.length; i++) {
formData.append('ListImages', myImages[i], myImages[i].name);
}
}
console.log(formData);
return this.http.post<MainVM>('http://localhost:60458/api/mycontroller/', formData, httpOptions).pipe(
map((res) => { console.log('res'); return res; }),
catchError(this.handleError('lpc', null))
);
}
buildFormData(formData, data, parentKey) {
if (data && typeof data === 'object' && !(data instanceof Date) && !(data instanceof File)) {
Object.keys(data).forEach(key => {
console.log(key);
this.buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key);
});
}
else {
const value = data == null ? '' : data;
formData.append(parentKey, value);
}
}