【发布时间】:2014-01-23 10:10:51
【问题描述】:
我正在尝试接受来自客户端(iOS 应用)的帖子,但我的代码在读取流时一直失败。说消息不完整。我一直试图让这个工作好几个小时,我的消息格式或其他东西似乎有问题。我要做的只是读取一个字符串,但与我一起做 iOS 部分的开发人员只知道如何发送 multipart/form-data 而不是 content-type json。
这是确切的错误:
MIME 多部分流意外结束。 MIME 多部分消息不完整。”
这里失败了:await Request.Content.ReadAsMultipartAsync(provider);
标题:
POST http://localhost:8603/api/login HTTP/1.1
Host: localhost:8603
Accept-Encoding: gzip,deflate
Content-Type: multipart/form-data; boundary=------------nx-oauth216807
Content-Length: 364
Accept-Language: en-us
Accept: */*
Connection: keep-alive
主体:
--------------nx-oauth216807
Content-Disposition: form-data; name="token"
CAAH5su8bZC1IBAC3Qk4aztKzisZCd2Muc3no4BqVUycnZAFSKuleRU7V9uZCbc8DZCedYQTIFKwJbVZCANJCs4ZCZA654PgA22Nei9KiIMLsGbZBaNQugouuLNafNqIOTs9wDvD61ZA6WSTd73AVtFp9tQ1PmFGz601apUGHSimYZCjLfGBo40EBQ5z6eSMNiFeSylym1pK4PCvI17fXCmOcRix4cs96EBl8ZA1opGKVuWizOsS0WZCMiVGvT
--------------nx-oauth216807--
这里是 WebAPI 代码:
public async Task<HttpResponseMessage> PostFormData()
{
// Check if the request contains multipart/form-data.
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
try
{
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var provider = new MultipartFormDataStreamProvider(root);
// Read the form data and return an async task.
await Request.Content.ReadAsMultipartAsync(provider);
// This illustrates how to get the file names.
foreach (MultipartFileData file in provider.FileData)
{
Trace.WriteLine(file.Headers.ContentDisposition.FileName);
Trace.WriteLine("Server file path: " + file.LocalFileName);
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
【问题讨论】:
-
5.0 及之前的 Web API 存在一个已知问题,即多部分表单数据请求末尾的额外行会导致 Web API 的多部分解析器出现问题。这个错误在 5.0 之后得到了修复。
-
传入请求中的“额外行”在哪里?我可以尝试修复该请求。另外,您的意思是 .NET 5.0 吗?我正在使用 .NET 4.5。
-
我的意思是最后一个边界之后的 CRLF..即
--------------nx-oauth216807-- -
我遇到了同样的错误“读取 MIME 多部分正文部分时出错。”有解决方法吗?还是 web api 2.1 还存在问题?
-
我无法使用内置解析器来完成这项工作。我必须自己写。
标签: c# asp.net ios json asp.net-web-api