【发布时间】:2013-02-18 12:33:28
【问题描述】:
我有一个使用 ASP.NET Web Api 编写的系统 API,我正在尝试扩展它以允许上传图像。我做了一些谷歌搜索,发现了使用 MultpartMemoryStreamProvider 和一些异步方法接受文件的推荐方法,但我在 ReadAsMultipartAsync 上的等待永远不会返回。
代码如下:
[HttpPost]
public async Task<HttpResponseMessage> LowResImage(int id)
{
if (!Request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = new MultipartMemoryStreamProvider();
try
{
await Request.Content.ReadAsMultipartAsync(provider);
foreach (var item in provider.Contents)
{
if (item.Headers.ContentDisposition.FileName != null)
{
}
}
return Request.CreateResponse(HttpStatusCode.OK);
}
catch (System.Exception e)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
}
}
我可以一路走下去:
await Request.Content.ReadAsMultipartAsync(provider);
到那时它永远不会完成。
我的 await 永远不会返回的原因是什么?
更新
我正在尝试使用 curl POST 到这个动作,命令如下:
C:\cURL>curl -i -F filedata=@C:\LowResExample.jpg http://localhost:8000/Api/Photos/89/LowResImage
我也尝试过使用以下 html 来 POST 到该操作,并且发生了同样的事情:
<form method="POST" action="http://localhost:8000/Api/Photos/89/LowResImage" enctype="multipart/form-data">
<input type="file" name="fileupload"/>
<input type="submit" name="submit"/>
</form>
【问题讨论】:
-
你的客户端代码是什么样子的?
-
您能分享一下您的原始请求是什么样的吗?
-
在
await之后的代码中也放一个断点。有时,当您使用 async/await 时,它不会中断/跳到下一行(根据我的经验) -
hmm...我尝试使用相同的代码和上面的 html,但我没有看到您提到的问题...
-
我来自 asp.net web api 团队。如果您可以将您的复制项目发送给我,我将有兴趣进行更多调试。我的邮箱:kiranchalla@hotmail.com
标签: c# asp.net-web-api c#-5.0