在调试用于保存文件的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方法发送文件 我在控制器的上传方法的第一行设置了一个断点,并从客户端发送一个文件。断点消失了。它在所有文件上传到服务器之前就消失了。这是预期的行为,一切都很好。
现在问题。我发送一个大文件,断点不会发生。文件正在上传(POST),控制器没有被调用! 更糟糕的是,在文件最终上传后,我在客户端上找到了404 Not Found。 我的站点位于使用ASP.NET Web API 5.1.2(.NET 4.5)的IIS下的localhost上。
我开始更改文件大小以选择事物工作时的大小。事实证明,它是1000000000(一百万字节)。如果请求的长度(数据和标头)是1M字节,那么一切正常:断点关闭并且文件被上传。如果请求的长度超过1个字节,则无效:断点没有关闭,文件似乎正在上传(即数据正在发送),但它不清楚它在哪里作为控制器上传的内容未被调用。
作为我在localhost上的网站,我无法相信它是由代理服务器造成的。
所以我的问题是怎么回事?发布1M字节请求会出现什么问题?
P.S。我知道IIS和ASP.NET对请求长度(4Gb和2Gb)的硬限制 - 不会超出它们。
答案 0 :(得分:0)
在IIS Manager
点击您的网站并转到Configuration Editor
- 您需要将maxRequestLength
更改为符合您要求的值。
编辑: 设置的第二位请求限制在此处:
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1000000000" /> <!-- change this -->
</requestFiltering>
</security>
</system.webServer>
答案 1 :(得分:0)
所以我完全忘记了web.config中的设置。事实证明,1M是那里设定的限制:(
<system.web>
<httpRuntime maxRequestLength="1000000000" />
</system.web>
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="1000000000" />
</requestFiltering>
</security>
</system.webServer>