MIME 多部分流意外结束。MIME 多部分消息不完整。Web API 和超级代理

And*_*alk 5 c# file-upload superagent reactjs

我在将文件从客户端上传到 Web api 时遇到问题。我收到此错误“MIME 多部分流意外结束。MIME 多部分消息不完整。” 当我试图阅读多部分内容时,在控制器中。我用 superagent 构建了一个 React JS 客户端,这是我的请求代码:

 UploadFiles(files: File[]): Promise.IThenable<any> {

    return this.Post("/Payment/files" , {
        data: {
            files: files
        },
        headers: {
            "Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p",
            "Content-Disposition": "form-data; name=Foo",
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这是我的控制器代码:

[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);
        }

}
Run Code Online (Sandbox Code Playgroud)

小智 6

我认为这里的问题是由以下原因引起的:

headers: {
             "Content-Type": "multipart/form-data; boundary=gc0p4Jq0M2Yt08jU534c0p",
             "Content-Disposition": "form-data; name=Foo",
         }
Run Code Online (Sandbox Code Playgroud)

我有一个类似的问题,并通过删除标头参数解决了,我猜超级代理会自动添加它们。