Sha*_*vin 14 c# asp.net json ios asp.net-web-api
我正在尝试接受来自客户端(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
Run Code Online (Sandbox Code Playgroud)
身体:
--------------nx-oauth216807
Content-Disposition: form-data; name="token"
CAAH5su8bZC1IBAC3Qk4aztKzisZCd2Muc3no4BqVUycnZAFSKuleRU7V9uZCbc8DZCedYQTIFKwJbVZCANJCs4ZCZA654PgA22Nei9KiIMLsGbZBaNQugouuLNafNqIOTs9wDvD61ZA6WSTd73AVtFp9tQ1PmFGz601apUGHSimYZCjLfGBo40EBQ5z6eSMNiFeSylym1pK4PCvI17fXCmOcRix4cs96EBl8ZA1opGKVuWizOsS0WZCMiVGvT
--------------nx-oauth216807--
Run Code Online (Sandbox Code Playgroud)
这是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);
}
}
Run Code Online (Sandbox Code Playgroud)
Mat*_* J. 40
我的应用程序也定期遇到此错误.升级到WEB API 2.1什么也没做,异常消息完全没用.
我认为实际发生的事情是它在大文件上窒息.在web.config中增加我的最大请求限制似乎正好解决了这个问题.
<system.web>
<httpRuntime maxRequestLength="30000" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="30000" />
</requestFiltering>
</security>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
(这将天花板设置为30兆.将其设置为您需要的任何东西.更多信息在这里)
Lev*_*ets 12
我也遇到了这个错误.这InnerException是Cannot access a disposed object.意味着在你打电话之前有东西正在读你的流ReadAsMultipartAsync.
在此调用之前的某个地方Request.Content.ReadAsMultipartAsync(provider),您可以调用
Request.Content.LoadIntoBufferAsync().Wait(),这会将此tream加载到缓冲区中,并允许您多次读取它.
这不是最佳解决方案,但可行.
有类似的错误帖子,对于某些人来说,有效的解决方案是:在文件上传 html 控件中提及 Id=""、name="" 属性,这要归功于WebAPI 上传错误。MIME 多部分流预计结束。MIME 多部分消息不完整
但就我而言,上面的简单调整并没有解决它:(
| 归档时间: |
|
| 查看次数: |
26960 次 |
| 最近记录: |