我正在编写一个上载函数,并且遇到文件大于httpRuntimeweb.config中指定的最大大小(最大大小设置为5120)时,捕获“ System.Web.HttpException:最大请求长度超出”的问题。我正在使用一个简单<input>的文件。
httpRuntime
<input>
问题是该异常在上载按钮的单击事件之前引发,并且该异常在我的代码运行之前发生。那么,如何捕获和处理异常?
编辑: 异常立即引发,所以我很确定这不是由于连接速度慢而引起的超时问题。
不幸的是,没有简单的方法来捕获此类异常。我要做的是要么在页面级别覆盖OnError方法,要么在global.asax中覆盖Application_Error,然后检查它是否是最大请求失败,如果是,则转移到错误页面。
protected override void OnError(EventArgs e) ..... private void Application_Error(object sender, EventArgs e) { if (GlobalHelper.IsMaxRequestExceededException(this.Server.GetLastError())) { this.Server.ClearError(); this.Server.Transfer("~/error/UploadTooLarge.aspx"); } }
这是一个hack,但是下面的代码对我有用
const int TimedOutExceptionCode = -2147467259; public static bool IsMaxRequestExceededException(Exception e) { // unhandled errors = caught at global.ascx level // http exception = caught at page level Exception main; var unhandled = e as HttpUnhandledException; if (unhandled != null && unhandled.ErrorCode == TimedOutExceptionCode) { main = unhandled.InnerException; } else { main = e; } var http = main as HttpException; if (http != null && http.ErrorCode == TimedOutExceptionCode) { // hack: no real method of identifying if the error is max request exceeded as // it is treated as a timeout exception if (http.StackTrace.Contains("GetEntireRawContent")) { // MAX REQUEST HAS BEEN EXCEEDED return true; } } return false; }