2014-07-24 19:01:12|?次阅读|上传:wustguangh【已有?条评论】发表评论
关键词:C#, ASP.NET|来源:唯设编程网
默认情况,ASP.NET上传文件的最大值为4M,如果我们不做任何处理,等到Application_Error事件处理捕获到“Maximum request length exceeded.”异常为时已晚,页面已无法正常Redirect至Custom Error Page。所以我们应该设法使系统不抛出“Maximum request length exceeded.”异常。而要使系统不抛出该异常,就应在HttpHandler处理Request之前,使HttpHandler得到的HttpContext的内容小于maxRequestLength。我们可以在Global.asax中的Application_BeginRequest事件处理过程中作一番文章
<httpRuntime executionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>
private void Application_BeginRequest (Object source, EventArgs e) { HttpRequest request = HttpContext.Current.Request; if (request.ContentLength > 40960000)//4096000 is maxRequestLength { HttpApplication app = source as HttpApplication; HttpContext context = app.Context; HttpWorkerRequest wr = (HttpWorkerRequest)(context.GetType().GetProperty ("WorkerRequest", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(context, null)); byte[] buffer; if (wr.HasEntityBody()) { int contentlen = Convert.ToInt32(wr.GetKnownRequestHeader( HttpWorkerRequest.HeaderContentLength)); buffer = wr.GetPreloadedEntityBody(); int received = buffer.Length; int totalrecv = received; if (!wr.IsEntireEntityBodyIsPreloaded()) { //buffer = new byte[65535]; buffer = new byte[999999]; while (contentlen - totalrecv >= received) { received =wr.ReadEntityBody(buffer, buffer.Length); totalrecv += received; } received =wr.ReadEntityBody(buffer, contentlen - totalrecv); } } //Redirect to custom error page. context.Response.Redirect("~/ErrorPage.aspx?ErrorInfo=The upload file exceeded,plese upload a small file again."); } }
其中显示了Request的ContentLength最大为40960000字节,即40000kb,当大于该值时,将会使用Response的Redirect函数将页面跳转到错误提示页面ErrorPage.aspx。