Creo que he pasado más tiempo en StackOverflow y otros sitios estas últimas 2 semanas que fuera de mi computadora. Probé varios Josh Morony y otros sitios profesionales de Ionic usando diferentes componentes de carga de arrastrar/soltar archivos, y probé diferentes combos en el lado de la API con [FromForm], [FromBody], como un objeto con IList incrustado, solo como un solo param, etc. y solo obtener valores nulos.
También verifiqué para asegurarme de que el nombre de la variable de archivo 'formFiles' coincida también.
La ÚNICA vez que he visto el éxito es cuando usé un buen 'ol XMLHttpRequest y boom... vi los archivos en la API de inmediato. Obviamente, ese no es el tipo de solicitud HTTP que necesito usar, por lo que cualquier ayuda será muy apreciada.
upload() { if (!this.selectedFiles || this.selectedFiles.length === 0) { this.errorMsg = 'Please choose a file.'; return; } const formData = new FormData(); this.selectedFiles.forEach((f) => formData.append('formFiles', f)); let customHeaders = new HttpHeaders(); customHeaders = customHeaders.set('Content-Type', 'multipart/form-data'); const req = new HttpRequest( 'POST', this.defaultApiUrl + 'ARBs/NewARBs', formData, { headers: customHeaders, reportProgress: true, } ); this.uploading = true; this.httpClient .request<CertificateSubmissionResult[]>(req) .pipe( finalize(() => { this.uploading = false; this.selectedFiles = null; }) ) .subscribe( (event) => { if (event.type === HttpEventType.UploadProgress) { this.uploadProgress = Math.round( (100 * event.loaded) / event.total ); } else if (event instanceof HttpResponse) { this.submissionResults = event.body as CertificateSubmissionResult[]; } }, (error) => { // Here, you can either customize the way you want to catch the errors throw error; // or rethrow the error if you have a global error handler } );}
y para la API:
[HttpPost] [Route("api/ARBs/NewARBs")] [RequestSizeLimit(long.MaxValue)] public async Task<ActionResult> PostAsync([Required] List<IFormFile> formFiles) { var s = "New String"; return Ok(); }También lo probé sin el encabezado personalizado multipart/form-data, pero aparece como application/json, que probablemente no sea lo que quiero. Si alguien puede ser ese segundo par de ojos y detectar lo que claramente me estoy perdiendo, seguramente lo agradecería.