Question

I'm using the .NET WebAPI to self-host a REST API from my .NET application. I have configured a controller to accept your standard GETs and POSTs, but there is one case that I have yet to cover.

On the UI side, a user will fill out a form, including a path to a file to be uploaded, and this data + file should be posted to my server via its REST API when the user clicks submit. It's easy to design a POST method in my controller for just the data portion, but how do we also accept a file upload as part of that POST method?

An example of what my current method for receiving a post request without the file data is as follows:

        // public class EventsController : ApiController
        public HttpResponseMessage PostEvent(EventRow e)
        {
            // some database work here.
            if (e == null) { return BadRequest(e); }

            var validResponse = Request.CreateResponse<EventRow>(System.Net.HttpStatusCode.Created, e);
            string uri = Url.Link("API Default", new { id = e.Id });
            validResponse.Headers.Location = new Uri(uri);

            return validResponse;
        }
Was it helpful?

Solution

You can convert the file to a base64 encoded byte array and send that up as a property in the JSON object you're sending. No need for special headers, "application/json" and post will work just fine.

Stack overflow question concerning using javascript to convert a file to a base64 encoded byte array.

C# should just be File.WriteAllBytes(), or store the byte array in a database or other data store.

OTHER TIPS

HttpRequest.Files should contain the uploaded binary to be used how you please. You will likely need to access this manually within the Action Method of the Controller.

Note that the file collection is populated only when the HTTP request content-type value is "multipart/form-data".

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top