How to migrate your code for uploading files from .NET Framework to .NET Core
I recently had to migrate code, for uploading Excel, files from an older .NET Framework application to a new one which is based on .NET Core. I would like to share my learnings with you in a “before and after” form.
No HttpRequestBase any more
You will have to replace the
HttpResponseBase class from the
System.Web assembly with the
HttpResponse class from
Microsoft.AspNetCore.Http.HttpResponse. The HttpResponse is the object that you receive from the UI in your WebAPI controller.
More information about this can be found here.
Uploaded file is not in InputStream to be found, but in Body
In the older .NET Framework you would access the stream through the
HttpResponseBase.InputStream property. In the new .NET Core world you access it with the
More information about it here.
No Length property anymore. Use the ContentLength property instead
After you read the stream you want to convert it into a byte array. For that you will first have to instantiate the byte array and you will need to know its length based on the length of the stream.
You will do that by accessing the
Here is the relevant question from StackOverflow.
Use the async method Stream.ReadAsync instead of Stream.Read
Stream.Read() with the preferred
Stream.ReadAsync() method to write the stream data into the byte array.
More information can be found here.
How the final code looks like
Stream stream = request.Body; byte data = new byte[request.ContentLength.Value]; await stream.ReadAsync(data, 0, data.Length);