【发布时间】: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的更多信息。
标签: file-upload asp.net-web-api postman