「System.Web.HttpException:最大要求長を超えた」の処理
5188 ワード
通常(これに限らず)にアップロードファイルがASPより大きい.NETデフォルトの4 MまたはWeb.configの構成時にこの異常が放出されます.
Web.config構成:
Webを調整するだけならconfigのmaxRequestLengthは治標不治本である.
今日はネット上で方法を見つけました.コードは大体次のようになっています.
Global.asax.cs
ネーミングスペースの追加が必要
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();
}
}