我正在为MVC 5.2.3项目使用属性路由,并且遇到了一个奇怪的问题。
用户可以将文件上传到站点,最大文件大小为3 MB。该功能曾经并且正在正常工作。不过,最近,我意识到大小限制仅通过Javascript强制执行。因此,我在保存文件之前添加了一些处理以检查服务器端大小。然后,我删除了前端的限制,并上传了5.26 MB的文件进行测试。令我松了一口气的是,上传被阻止了。不过令我震惊的是,响应不是我格式化好的错误消息,而是404。
使用IIS Express进行调试,我发现对于大型文件,该请求甚至无法执行。另一方面,上传小文件(测试高达800KB)仍然可以正常工作。我什至可以将编码限制减少到1 KB,并通过不错的错误消息成功阻止800KB文件。
默认IIS最大请求长度似乎为30 MB。我试图提高这一点,尽管如此,但没有运气。我查看了我们使用的jQuery文件上传库,但该库支持最大4GB的文件。我也尝试用Fiddler记录请求,但是找不到较大的请求失败的任何明显原因。我还尝试记录成功提交的文件,然后使用Fiddler的作曲器功能重放该文件,并用较大的文件替换该文件。我得到404。最后一个奇怪的事情我无法解释,当在Firefox开发工具中查看“网络”选项卡以获取成功请求时,“类型”列将为JSON。失败/大请求显示XML。
我在机智的尽头。为什么我的路由仅对大文件失败?
在web.config中的maxAllowedCOntentLength
下签出system.webServer
设置并设置所需的最大值(以字节为单位的值:]
<system.webServer>
<security>
<requestFiltering>
<requestLimits maxAllowedContentLength="104857600" />
</requestFiltering>
</security>
</system.webServer>
Roman.Pavelko的回答并没有成为问题,但确实使我走上了正确的道路。
您可以在web.config中应用另一种设置,如下所示:
<system.web>
<httpRuntime maxRequestLength="xxxx" />
</system.web>
此值默认为4MB(以字节为单位)。将其增加到50MB后,一切都变得像个魅力!