提供的“HttpContent”实例无效。它没有带有“边界”参数的“多部分”内容类型标头

Posted

技术标签:

【中文标题】提供的“HttpContent”实例无效。它没有带有“边界”参数的“多部分”内容类型标头【英文标题】:Invalid 'HttpContent' instance provided. It does not have a 'multipart' content-type header with a 'boundary' parameter 【发布时间】:2014-08-21 15:23:29 【问题描述】:

我正在编写一个 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);
        
    

然后我通过邮递员发布对上述操作的请求。 我将内容类型标头设置为 multipart/form-data 但是在执行动作的过程中发生了错误。 这是错误消息正文:

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

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

谁能帮帮我?

【问题讨论】:

我不确定我是否理解。带有“?”的 Content-Type 标头旁边是响应标头(不是您所说的请求标头),看起来不错,因为您收到的响应是 json 格式的错误。问题一定出在其他地方,特别是您在请求中提交数据的方式。 谢谢你的回复。你是对的。这是响应头。我意识到我的错误,问题出在其他地方...... 不客气。我只是希望它对你有一点帮助。 我找到了!有一个名为“enctype”的请求标头属性必须设置为“multipart/form-data”才能使上传工作。非常感谢您的帮助 啊,是的。如果您还没有阅读,请查看this protected SO question 以获取有关enctype 的更多信息。 【参考方案1】:

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

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

看看当您手动设置 Content-Type 与不设置时会发生什么:

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

【讨论】:

如果有人正在寻找关于如何在邮递员中执行此操作的视觉细节。请检查此answer。【参考方案2】:

第一:Postman 在处理基于文件的请求时存在错误。

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

GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

【讨论】:

以上是关于提供的“HttpContent”实例无效。它没有带有“边界”参数的“多部分”内容类型标头的主要内容,如果未能解决你的问题,请参考以下文章

找不到如何使用 HttpContent

Mysql无效使用带Count的组函数?

Angular 2 错误:无效的提供者 - 只允许提供 Provider 和 Type 的实例,得到:[object Object]

htaccess 在 localhost 中有效,但在 EC2 实例中无效

从提供程序读取数据时发生错误。根据验证程序,远程证书无效

带参数的访问查询在 Access 中有效,在 C# 中无效