My server uses .Net Core 2.1.402
Here is my C# class:
public class SampleDetailsDto
{
public Guid Id{ get; set; }
public string Text { get; set;
Read answer fron maherjendoubi here : https://forums.asp.net/t/2099194.aspx?Net+Core+Web+API+How+to+upload+multi+part+form+data
public ActionResult CreateDocument()
{
foreach(var key in Request.Form.Keys)
{
var data = JsonConvert.DeserializeObject<ChildSampleDetailsDto>(Request.Form[key]);
var file = Request.Form.Files["file" + key];
}
return Ok();
}
For the angular part use an HttpRequest
:
const sendable = new FormData();
for (let i; i < files.length; i++) {
sendable.append('filedata' + i, files[i], files[i].name);
sendable.append('data' + i, JSON.stringify(data[i]));
}
const request = new HttpRequest(item.method,
item.url,
sendable,
{
reportProgress: true
});
// this._http: HttpClient
this._http.request(request)
.subscribe((event: any) => {
if (event.type === HttpEventType.UploadProgress) {
// on progress code
}
if (event.type === HttpEventType.Response) {
// on response code
}
}, error => {
// on error code
});
Use IFormFile
and [FromForm]
and do not access the request to extract files.
Angular code:
public sendFiles(files: File[], [...]): Observable<any> {
const formData = new FormData();
formData.append('files', files); // add all the other properties
return this.http.post('http://somehost/someendpoint/fileupload/', formData);
}
ASP.NET Core code:
public class MyFileUploadClass
{
public IFormFile[] Files { get; set; }
// other properties
}
[HttpPost("fileupload")]
public async Task<IActionResult> FileUpload([FromForm] MyFileUploadClass @class) // -> property name must same as formdata key
{
// do the magic here
return NoContent();
}