在我的ASP.NET MVC(v2,如果它很重要)应用程序中,我有一个允许用户上传文件的页面。我为我的应用配置了maxRequestLength,允许最大25MB的文件。作为测试,我发送一个500MB的文件,抛出异常:Maximum request length exceeded.
(我只知道这个,因为ELMAH捕获错误并记录它。)
在我的web.config中,我已将customErrors mode="On"
设置为defaultRedirect
,但用户根本没有重定向,他们甚至没有获得黄色死亡屏幕。例如,在Chrome中,您会看到错误:Error 101 (net::ERR_CONNECTION_RESET): Unknown error.
是否有可能为这种情况提供更优雅的用户体验?
答案 0 :(得分:4)
据我所知,没有办法优雅地处理超过IIS的“maxRequestLength”设置。它甚至无法显示自定义错误页面(因为没有相应的HTTP代码可以响应)。解决这个问题的唯一方法是将maxRequestLength设置为一些荒谬的高kbytes,例如51200(50MB),然后在上传文件后检查ContentLength(假设请求在90秒之前没有超时)。此时,我可以验证文件< = 5MB并显示友好错误。
答案 1 :(得分:2)
在这里尝试最后的解决方案,我尝试了它并且工作正常。
答案 2 :(得分:0)
如果所选文件超过最大请求长度,我通过使页面无效(因此它不会回发)解决了这个问题。它需要为客户端提供自定义验证控件,验证fileupload控件。 这是服务器验证子,用于将文件大小限制为4Mb:
Sub custvalFileSize_ServerValidate(ByVal s As Object, ByVal e As ServerValidateEventArgs)
'FileUpload1 size has to be under 4Mb
If (FileUpload1.PostedFile.ContentLength > 4194304) Then
e.IsValid = False
Else
e.IsValid = True
End If
End Sub
这是客户端验证功能:
function custvalFileSize_ClientValidate(src,args){
if (document.all("FileUpload1").files[0].size > 4194304){
args.IsValid = false;
} else {
args.IsValid = true;
}
}
上传控制和验证控件:
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" BackColor="#FFFFFF" BorderColor="#FF0000" BorderStyle="solid" BorderWidth="0" ClientValidationFunction="custvalFileSize_ClientValidate" ControlToValidate="FileUpload1" Display="Dynamic" EnableClientScript="true" ErrorMessage="<b>Please upload document files of 4Mb or less.</b>"
Font-Bold="false" Font-Names="Verdana, Arial, Helvetica" Font-Size="9px" ForeColor="#FF0000" OnServerValidate="custvalFileSize_ServerValidate" Text="<br/><span style='font-weight:bold;font-size:12px;'>This file is too large.<br />We can only accept documents of 4Mb or less.</span>"></asp:CustomValidator>