我在将文件从客户端上传到web api时遇到问题。我收到此错误“MIME多部分流的意外结束.MIME多部分消息未完成。”在我试图阅读多部分内容时在控制器中。我用superagent构建了一个React JS客户端,这是我的请求代码:
[Route("files")]
[HttpPost]
public async Task<HttpResponseMessage> UploadFiles()
{
string root = Path.GetTempPath();
var provider = new MultipartFormDataStreamProvider(root);
Stream reqStream = Request.Content.ReadAsStreamAsync().Result;
MemoryStream tempStream = new MemoryStream();
reqStream.CopyTo(tempStream);
tempStream.Seek(0, SeekOrigin.End);
StreamWriter writer = new StreamWriter(tempStream);
writer.WriteLine();
writer.Flush();
tempStream.Position = 0;
StreamContent streamContent = new StreamContent(tempStream);
foreach (var header in Request.Content.Headers)
{
streamContent.Headers.Add(header.Key, header.Value);
}
try
{
// Read the form data.
streamContent.LoadIntoBufferAsync().Wait();
//This is where it bugs out
await streamContent.ReadAsMultipartAsync(provider);
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
这是我的控制器代码:
Test
答案 0 :(得分:4)
我认为这里的问题是由:
引起的headers: {
"Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p",
"Content-Disposition": "form-data; name=Foo",
}
我有一个类似的问题,并通过删除标头参数解决,我猜测superagent会自动添加它们。
答案 1 :(得分:0)
我通过这样做解决了这个问题:
headers: {
"Content-Disposition": "form-data; name=Foo",
"enctype": "multipart/form-data"
}
答案 2 :(得分:0)
我能够通过删除我在post方法上手动设置的标题来解决此问题。 Angular 6 + .NET Web Api
答案 3 :(得分:0)
我因为一个愚蠢的错误而得到这个错误:我的浏览器代理/客户端(我使用的是 Postman),实际上没有选择文件
如果您使用的是 Postman,还要检查您的标题是否合适(如该问题的其他答案和 other questions 所示):
<块引用>Content-type
字段已设置为 multipart/form-data