其实我的问题很简短。
如何从 ASP.NET Web API POST 或 PUT 获取 HttpPostedFile?
我确实看到我可以从 Request.Header、Request.Content、Request.Properties 等请求中获取各种信息。我在哪里可以找到我传递的文件,如何从中创建 HttpPostedFile?
提前致谢!
其实我的问题很简短。
如何从 ASP.NET Web API POST 或 PUT 获取 HttpPostedFile?
我确实看到我可以从 Request.Header、Request.Content、Request.Properties 等请求中获取各种信息。我在哪里可以找到我传递的文件,如何从中创建 HttpPostedFile?
提前致谢!
查看 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;
}
恐怕您的简短问题没有简短的答案。
ASP.NET Web API 向您展示了 HTTP 的奇妙之处,而 ASP.NET MVC 抽象了其中的一部分——在本例中为 HttpPostedFile。
所以有点背景:
涉及文件的 HTTP 帖子通常具有多部分表单数据内容。这意味着您正在混合不同类型的内容类型:您的普通表单数据将使用 formurlencoded 发送,而文件将使用 application/octent-stream 发送。
所以在 Web API 中,你所要做的就是说
var contents = message.Content.ReadAsMultipartAsync(); // message is HttpRequestMessage
其中一个内容将包含您的文件。