【发布时间】:2015-09-17 14:12:28
【问题描述】:
我正在使用 VS2015 创建一个 WebApi 项目。具体来说,我正在尝试编写一个简单的 Web 服务来使用 POST 上传文件。
我在使用以前版本的 Visual Studio 之前已经这样做了,但是 VS2015 使用了 ASP.NET 5 和 MVC 6,这显然有一些重大的 api 更改。
以前,我可以使用这样的东西:
Request.Content.ReadAsMultipartAsync().Result.Contents
顺便说一句,这是我搜索到的每个网站都推荐的。但是我的 VS2015 副本给了我以下编译时错误消息:
'HttpContent 不包含 ReadAsMultipartAsync 的定义'
WebApi 的整体项目结构似乎在 VS2015 中进行了改进。在这一点上,我不知道出了什么问题(无论是代码问题还是 VS2015 问题)。在过去的几天里,我一直在试图解决这个问题。谁能提供有关我做错了什么的见解?
下面是我的控制器的全部内容:
[Route("api/[controller]")]
public class UploadController : Controller
{
private readonly IApplicationEnvironment appEnvironment;
public UploadController(IApplicationEnvironment appEnvironment)
{
this.appEnvironment = appEnvironment;
}
// POST api/values
[HttpPost]
public void Post(HttpRequestMessage request)
{
string logFolder = "logs";
string fileName = "uploader.log";
string logFile = Path.Combine(this.appEnvironment.ApplicationBasePath, logFolder, fileName);
string directory = Path.GetDirectoryName(logFile);
if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
using (Stream requestStream = GetStreamFromUploadedFile(request))
{
using (Stream fileStream = System.IO.File.Create(logFile))
{
try
{
requestStream.CopyTo(fileStream);
}
finally
{
// No longer supported?
//fileStream.Close();
//requestStream.Close();
}
}
}
}
private static Stream GetStreamFromUploadedFile(HttpRequestMessage request)
{
IEnumerable<HttpContent> parts = null;
Task.Factory
.StartNew(() => parts = request.Content.ReadAsMultipartAsync().Result.Contents,
CancellationToken.None,
TaskCreationOptions.LongRunning,
TaskScheduler.Default)
.Wait();
Stream stream = null;
Task.Factory
.StartNew(() => stream = parts.First().ReadAsStreamAsync().Result,
CancellationToken.None,
TaskCreationOptions.LongRunning,
TaskScheduler.Default)
.Wait();
return stream;
}
}
【问题讨论】:
-
ASP.NET 5 仍处于测试阶段。记住这一点,很多东西都被转移了。如果您对此不满意,您可能还不想使用 ASP.NET 5。简单地用谷歌搜索可能会为旧版本的 ASP.NET 找到建议,除非您知道在哪里查找,否则不会那么有用。由于 ASP.NET 5 是在 GitHub 上公开开发的,欢迎您查看那里的source。
-
希望我从一开始就知道这一点。 感谢您的回复。
标签: asp.net-mvc asp.net-web-api visual-studio-2015 asp.net-core-mvc