16

我正在编写一个 web api,它有一个 post 方法接受从 UI 上传的文件。

public async Task<List<string>> PostAsync()
    {

        if (Request.Content.IsMimeMultipartContent("form-data"))
        {
            string uploadPath = HttpContext.Current.Server.MapPath("~/uploads");

            var streamProvider = new MyStreamProvider(uploadPath);

            await Request.Content.ReadAsMultipartAsync(streamProvider);

            return streamProvider.FileData
                .Select(file => new FileInfo(file.LocalFileName))
                .Select(fi => "File uploaded as " + fi.FullName + " (" + fi.Length + " bytes)")
                .ToList();
        }
        else
        {
            HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.BadRequest, "Invalid Request!");
            throw new HttpResponseException(response);
        }
    }

然后我通过邮递员发布对上述操作的请求。我将 content-type 标头设置为 multipart/form-data 但在执行操作期间发生错误。这是错误消息正文:

"提供的 'HttpContent' 实例无效。它没有带有 'boundary' 参数的 'multipart' 内容类型标头。\r\n参数名称: 内容"

我去了邮递员标头,但我发现请求标头内容类型设置为 application-json。

邮递员截图

谁能帮我?

4

2 回答 2

16

您正在查看 json 格式的响应标头,这对您来说没问题。

您真正的问题在于邮递员请求,因此只需从请求标头中删除“Content-Type:multipart/form-data”条目。 将文件作为表单数据上传并发送请求就足够了

看看当你手动设置 Content-Type 时会发生什么,而不是: 在此处输入图像描述 在此处输入图像描述

Postman 知道同时设置内容类型和边界,因为您只设置了内容类型

于 2017-05-09T11:35:01.117 回答
0

第一:邮递员在处理基于文件的请求时有一个错误。

您可以尝试将此添加到您的WebApiConfig.cs它对我有用:

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
于 2017-01-10T14:35:15.673 回答