【发布时间】:2014-12-16 08:56:25
【问题描述】:
我在调试用于保存文件的 WebAPI 控制器时遇到了一个奇怪的案例。
我的控制器有一个发布数据的方法
[HttpPost]
[HttpPut]
public async Task<HttpResponseMessage> Upload()
{
if (!request.Content.IsMimeMultipartContent())
{
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
var provider = await request.Content.ReadAsMultipartAsync();
MultipartFileData file = provider.FileData.FirstOrDefault();
// this is the uploaded file: file.LocalFileName
}
控制器的逻辑在这里并不重要。这里的关键点是控制器需要多部分内容。
现在,我从使用 jquery.fileupload 库的客户端通过 POST 方法发送文件。
我在控制器的 Upload 方法的第一行设置了一个断点,并从客户端发送了一个文件。断点消失。在所有文件上传到服务器之前它会熄灭。这是预期的行为,一切都很好。
现在的问题。我发送了一个大文件,断点没有关闭。文件正在上传(POST)并且控制器没有被调用!
更糟糕的是,在文件最终上传后,我在客户端上收到 404 Not Found。
我的网站位于 IIS 下的 localhost 上,使用 ASP.NET Web API 5.1.2 (.NET 4.5)。
我开始更改文件大小以选择工作正常时的大小。事实证明,这不是 1000000000(一百万字节)。如果请求的长度(数据和标头)为 1M 字节,则一切正常:断点消失并上传文件。如果请求的长度多 1 个字节,则无济于事:断点未关闭,文件似乎正在上传(即数据正在发送),但由于未调用控制器,因此不清楚上传的位置。
作为我在本地主机上的站点,我不敢相信它是由代理服务器引起的。
所以我的问题是发生了什么?发布 1M 字节请求有什么问题?
附言我知道 IIS 和 ASP.NET 对请求长度(4Gb 和 2Gb)的硬性限制——它们没有被超过。
【问题讨论】:
标签: asp.net http iis asp.net-web-api