如何接受文件上载和一些数据作为.NET REST API的POST

时间:2014-05-06 15:50:04

标签: c# .net api rest file-upload

我正在使用.NET WebAPI从我的.NET应用程序自我托管REST API。我已经配置了一个控制器来接受你的标准GET和POST,但有一个案例我还没有介绍。

在UI方面,用户将填写表单,包括要上载的文件的路径,并且当用户单击提交时,此数据+文件应通过其REST API发布到我的服务器。在我的控制器中为数据部分设计一个POST方法很容易,但是我们如何接受文件上传作为POST方法的一部分呢?

我目前接收没有文件数据的帖子请求的方法示例如下:

        // 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;
        }

2 个答案:

答案 0 :(得分:3)

您可以将文件转换为base64编码的字节数组,并将其作为您要发送的JSON对象中的属性发送。不需要特殊的标题,&#34; application / json&#34;和帖子会很好。

关于using javascript to convert a file to a base64 encoded byte array的堆栈溢出问题。

C#应该只是File.WriteAllBytes(),或者将字节数组存储在数据库或其他数据存储中。

答案 1 :(得分:1)

HttpRequest.Files应该包含您要使用的上传二进制文件。您可能需要在Controller的Action Method中手动访问它。

请注意,仅当HTTP请求内容类型值为&#34; multipart / form-data&#34;时才会填充文件集合。