「System.Web.HttpException:最大要求長を超えた」の処理

5188 ワード

通常(これに限らず)にアップロードファイルがASPより大きい.NETデフォルトの4 Mまたは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();

            }

        }