处理“System.Web.HttpException: 超过了最大请求长度”

在通常(不局限于此)在上传文件大于ASP.NET默认的4M 或 Web.config 的的配置时会抛出此异常;

Web.config 配置:

 

<configuration>
<system.web>
<httpRuntime maxRequestLength="4096" executionTimeout="3600" />
</system.web>
<configuration>


 

如果光是调整Web.config的 maxRequestLength 是治标不治本的。

今天研究了下在网上找到一个方法,代码大致如下:

Global.asax.cs

需要多引入命名空间

Using System.Web.Configuration;

void Application_BeginRequest(object sender, EventArgs e)
        {
            //本代码的功能是检查页面请求的大小,如果超过了配置文件maxRequestLength的设定值,就提示用户超过了所允许的文件大小。

            //从配置文件里得到配置的允许上传的文件大小
            HttpRuntimeSection runTime = (HttpRuntimeSection)WebConfigurationManager.GetSection("system.web/httpRuntime");

            //maxRequestLength 为整个页面的大小,不仅仅是上传文件的大小,所以扣除 100KB 的大小,
            //maxRequestLength单位为KB
            int maxRequestLength = (runTime.MaxRequestLength) * 1024;

            //当前请求上下文的HttpApplication实例
            //HttpContext context = ((HttpApplication)sender).Context;

            //判断请求的内容长度是否超过了设置的字节数
            if (Request.ContentLength > maxRequestLength)
            {
                #region 不理解这些代码存在的意义
                /*
                //得到服务对象
                IServiceProvider provider = (IServiceProvider)context;
                HttpWorkerRequest workerRequest = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));

                //检查请求是否包含正文数据
                if (workerRequest.HasEntityBody())
                {
                    //请求正文数据的长度
                    int requestLength = workerRequest.GetTotalEntityBodyLength();
                    //得到加载的初始字节数
                    int initialBytes = 0;
                    if (workerRequest.GetPreloadedEntityBody() != null)
                        initialBytes = workerRequest.GetPreloadedEntityBody().Length;

                    //检查是否所有请求数据可用
                    if (!workerRequest.IsEntireEntityBodyIsPreloaded())
                    {
                        byte[] buffer = new byte[512000];
                        //设置要接收的字节数为初始字节数
                        int receivedBytes = initialBytes;
                        //读取数据,并把所有读取的字节数加起来,判断总的大小
                        while (requestLength - receivedBytes >= initialBytes)
                        {
                            //读取下一块字节
                            initialBytes = workerRequest.ReadEntityBody(buffer, buffer.Length);
                            //更新接收到的字节数
                            receivedBytes += initialBytes;
                        }
                        initialBytes = workerRequest.ReadEntityBody(buffer, requestLength - receivedBytes);
                    }
                }
                */
                #endregion
                //注意这里可以跳转,可以直接终止;在VS里调试时候得不到想要的结果,通过IIS才能得到想要的结果;FW4.0经典或集成都没问题
                Response.Write("请求大小" + Request.ContentLength);
                Response.End();
            }
        }


 

 
cn.hutool.http.HttpException: read timed out 是 HTTP 请求超时的异常。当使用 Hutool 进行 HTTP 请求时,如果在规定的时间内未能读取到服务器的响应,就会抛出该异常。 造成 read timed out 异常的原因可能有以下几种: 1. 网络不稳定:可能是由于网络延迟或者网络不稳定导致的请求超时。可以尝试重新连接网络或者更换网络环境。 2. 服务器响应时间过长:如果服务器处理请求的时间过长,导致超过了默认的超时时间,就会出现 read timed out 异常。可以尝试增加超时时间,或者联系服务器管理员优化响应时间。 3. 请求过于频繁:如果在短时间内发送大量的请求,服务器可能无法及时处理,也会导致请求超时。可以适当调整请求频率,避免过于频繁地发送请求。 4. 请求过大:如果请求的数据量过大,可能会导致服务器响应时间增加,从而超过了超时时间。可以尝试减小请求的数据量,或者使用分片上传的方式进行大文件的传输。 解决 read timed out 异常的方法有以下几种: 1. 增加超时时间:可以通过设置超时时间来延长等待服务器响应的时间。在 Hutool 中可以使用 `Request.setConnectionTimeout(int)` 来设置连接超时时间,使用 `Request.setTimeout(int)` 来设置读取超时时间。 2. 检查网络连接:确保网络连接稳定。可以尝试重新连接网络或者更换网络环境。 3. 优化请求频率:如果是因为请求过于频繁导致的异常,可以适当减少请求的频率。 4. 减小请求数据量:如果请求的数据量过大,可以尝试减小请求的数据量,或者使用分片上传的方式进行大文件的传输。 总之,解决 cn.hutool.http.HttpException: read timed out 异常的方法是通过设置适当的超时时间,优化网络连接和请求参数等方式来避免请求超时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值