我已经在我的web.config(MVC)中指定了maxRequestLength
,如下所示:
<location path="File/Upload">
<system.web>
<httpRuntime maxRequestLength="330"/>
</system.web>
</location>
在测试超过330kb的文件上传时查看网络标签时,我看到服务器的响应为500
,详情为The required anti-forgery form field "__RequestVerificationToken" is not present.
为什么会这样?框架是否无法在响应中提供maxRequestLength
的详细信息?或者仅仅是为了不泄露有关系统的信息它只是不想要?
或者我的请求是否已被截断/裁剪以满足限制,这无意中删除了请求验证令牌?
这适用于不超过330kb的文件,我的上传工作正常。
答案 0 :(得分:0)
我看到你设置的maxRequestLength是330,这是文件上传的限制。 此值遵循以下规则:
1 Mb = 1024kb
您可以在以下网址查看更多详细信息:
因此,当您设置maxRequestLength =&#34; 330&#34;时,系统将理解文件上传限制为330kb。
答案 1 :(得分:0)
我怀疑您的某个操作(不一定是处理文件上传的操作)具有[ValidateAntiForgeryToken]
属性,并且您正在以某种方式看到来自该操作的错误。
我建议暂时注释掉项目中的所有[ValidateAntiForgeryToken]
属性,以便在尝试上传超出限制的文件时查看实际返回的内容。
答案 2 :(得分:0)
我尝试在示例项目上重新创建问题,但经过进一步研究,我发现ASP.NET MVC控制器操作不使用web.config文件中的location元素。这是因为与将文件映射到磁盘的ASP.NET不同,ASP.NET MVC使用路由。您可以在下面的链接中查看答案,尽管与其他问题有关,但请注意未使用位置标记。
How do I allow all users access to one route within a website with integrated auth?
在这种情况下,框架很可能无法对Upload操作的文件大小强制实施限制。
我不能完全确定,因为我无法重新创建500内部服务器错误,但我认为这可能是因为框架因位置元素而无法正确解释您的web.config。
关于防伪令牌的错误,请确保它存在于您的视图中(通过使用 @ Html.AntiForgeryToken())并且在您提交之前没有脚本将其从DOM中删除表格