我正在使用 Visual Studio 2012 express 附带的 MVC 版本。(Microsoft.AspNet.Mvc.4.0.20710.0)
我假设这是 RTM 版本。
我在网上找到了很多使用此代码的示例:
public Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
}
return Request.CreateResponse(HttpStatusCode.OK);
});
return task;
}
但是这段代码总是以 continueWith where 结束t.IsFaulted == true
。异常内容如下:
MIME 多部分流的意外结束。MIME 多部分消息不完整。
这是我的客户表格。没什么花哨的,我想为 ajax 上传做 jquery 表单插件,但我什至无法用这种方式工作。
<form name="uploadForm" method="post" enctype="multipart/form-data" action="api/upload" >
<input type="file" />
<input type="submit" value="Upload" />
</form>
我读到这是由于解析器在每条消息的末尾都期望 /CR /LF 引起的,并且该错误已在 6 月修复。
我想不通的是,如果它真的被修复了,为什么它不包含这个版本的 MVC 4?为什么互联网上有这么多例子吹捧这段代码在这个版本的 MVC 4 中不起作用?