博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
处理“System.Web.HttpException: 超过了最大请求长度”
阅读量:6001 次
发布时间:2019-06-20

本文共 2695 字,大约阅读时间需要 8 分钟。

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

Web.config 配置:

如果光是调整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();            }        }

 

转载地址:http://zddmx.baihongyu.com/

你可能感兴趣的文章
AD账号解锁
查看>>
English - in the light of(按照,根据)与according to的区别是什么
查看>>
浅析linux内核中的idr机制
查看>>
【转】.so兼容32位和64位
查看>>
PowerDesigner跟表的字段加注释
查看>>
w !sudo tee %
查看>>
javascript面试题:如何把一句英文每个单词首字母大写?
查看>>
URAL 1962 In Chinese Restaurant 数学
查看>>
计算 TPS,QPS 的方式
查看>>
洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]
查看>>
群晖NAS使用Docker安装迅雷离线下载出现the active key is not valid.
查看>>
spring boot 2使用Mybatis多表关联查询
查看>>
Making HTTP requests via telnet - Tony's Place
查看>>
千元机市场再添“新宠”,红米Note7和vivo Z3谁才是千元王者
查看>>
荣耀10GT升级EMUI 9.0体验分享:这可能是最好用的手机操作系统
查看>>
ZStack基于华芯通打造ARM国产云平台 助力云上贵州多项应用
查看>>
200本“保护日记”记录黄山迎客松生长变化
查看>>
多方力量携手呵护“中华水塔”青海三江源
查看>>
互联网的下一波红利在哪里?
查看>>
拿姐姐身份证登记结婚竟然成了!婚姻户籍信息共享难在哪儿
查看>>