【发布时间】:2013-07-31 19:28:02
【问题描述】:
当我可以使用 HttpContext.Current 获取所有信息时,我很难理解为什么要使用 MultipartFormDataStreamProvider。
这样做要容易得多:
var mydata = HttpContext.Current.Request.Form["mydata"];
比这个:
string root = HttpContext.Current.Server.MapPath("~/somedir");
var provider = new MultipartFormDataStreamProvider(root);
this.Request.Content.ReadAsMultipartAsync(provider).ContinueWith(t =>
{
var mydata = provider.Contents.First(c => c.Headers.ContentDisposition.Name == "\"mydata\"").ReadAsStringAsync().Result;
});
PS - 我正在尝试构建一个 ApiController 来接受文件上传。我读过这篇文章http://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2。
【问题讨论】:
-
一个原因是能够异步读取内容。
-
另一个原因是这在自托管场景中不起作用,因为您依赖于
HttpContext.Current。 -
不幸的是,在使用 WebAPI 时使用此方法需要将文件写入指定路径中的磁盘。没有官方文档说明写入的内容、原因或表明应用程序负责删除之后的文件。考虑到文件已经在流中,会有很多开销。
-
HttpContext.Current 是整体 System.Web 的一部分,它会在 ASP.NET 的未来版本中消失。 Web API 旨在与 ASP.NET vNext 向前兼容。
-
HttpContext.Current在单元测试中也不起作用,您可以使用 OWIN 的TestServer
标签: .net asp.net-web-api