如何从ASP.NET Web API(POST或PUT)调用获取httppostedfile?

Swi*_*der 4 http-post http-put asp.net-web-api

其实我的问题很简短.

如何从ASP.NET Web API POST或PUT获取HttpPostedFile?

我确实看到我可以从请求中获取各种信息,如Request.Header,Request.Content,Request.Properties.在哪里可以找到我传递的文件,如何从中创建HttpPostedFile?

提前致谢!

Jul*_*obs 6

查看Henrik Nielsen 的精彩文章,发布多部分内容(即发布带文件的表格)

更新:为控制器添加简单代码以接收没有多部分内容的文件

如果您只需要控制器来接收文件(即没有多部分内容),您可以执行上述操作.请求仅包含文件二进制文件,文件名在URL中传递.

public Task<HttpResponseMessage> Post([FromUri]string filename)
{
    Guid uploadedFile = Guid.NewGuid();
    Task<HttpResponseMessage> task = Request.Content.ReadAsStreamAsync().ContinueWith<HttpResponseMessage>(t =>
         {
            if (t.IsFaulted || t.IsCanceled)
                throw new HttpResponseException(HttpStatusCode.InternalServerError);

            try
            {
                using (Stream stream = t.Result)
                {
                    //TODO: Write the stream to file system / db as you need
                }
            }
            catch (Exception e)
            {
                Object o = e;
                return Request.CreateResponse(HttpStatusCode.InternalServerError, e.GetBaseException().Message);
             }

            return Request.CreateResponse(HttpStatusCode.Created, uploadedFile.ToString());
         });


    return task;
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*tad 5

恐怕你的简短问题没有简短的答案。

ASP.NET Web API 向您展示了 HTTP 的奇妙之处,而 ASP.NET MVC 则抽象了其中的一些 - 在本例中为 HttpPostedFile。

一些背景知识:

涉及文件的 HTTP 帖子通常具有多部分形式的数据内容。这意味着您正在混合不同类型的内容类型:您的普通表单数据将使用 formurlencoded 发送,而文件将发送应用程序/八进制流。

所以在 Web API 中,你所要做的就是说

var contents = message.Content.ReadAsMultipartAsync(); // message is HttpRequestMessage
Run Code Online (Sandbox Code Playgroud)

其中一项内容将包含您的文件。