Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public override void Init()
{
base.Init();
Error += ErrorHandler;
}
private void ErrorHandler(object sender, EventArgs args)
{
var ex = Server.GetLastError().InnerException as HttpException;
if(ex != null && ex.WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
{
// Maximum request length exceeded.
}
}public override void Init()
{
base.Init();
Error += ErrorHandler;
}
private void ErrorHandler(object sender, EventArgs args)
{
var ex = Server.GetLastError().InnerException as HttpException;
if(ex != null && ex.WebEventCode == System.Web.Management.WebEventCodes.RuntimeErrorPostTooLarge)
{
// Maximum request length exceeded.
}
}private const string C_MARKER = "multipart/form-data; boundary=";
private HttpWorkerRequest GetWorkerRequest(HttpContext context)
{
IServiceProvider provider = context;
// если траблы с доступом - используем
new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert();
return (HttpWorkerRequest) provider.GetService(typeof (HttpWorkerRequest));
}
private void Context_AuthenticateRequest(object sender, EventArgs e)
{
var app = sender as HttpApplication;
HttpWorkerRequest worker = GetWorkerRequest(app.Context);
int bufferSize;
string boundary;
string ct;
bool statusPersisted = false;
// заголовок запроса (multipart form data)
ct = worker.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentType);
// application/x-www-form-urlencoded
// проверка что это именно форма с файлом. еще и параметр запроса проверяем
if (worker.GetQueryString() == "upload" && ct != null &&
string.Compare(ct, 0, C_MARKER, 0, C_MARKER.Length, true, CultureInfo.InvariantCulture) == 0)
{
long length = long.Parse(worker.GetKnownRequestHeader(HttpWorkerRequest.HeaderContentLength));
if (length > 0)
{
if (length/1024 > GetMaxRequestLength(app.Context))
{
// здесь ставим статус "Запрос превышен". Клиент сможет его забрать и отменить загрузку
}
.....
/// <summary>
/// отдаем процент загрузки
/// </summary>
public void GetProgress()
{
UploadStatus status = UploadManager.Instance.Status;
m_message = new CMessageXml(status ?? UploadStatus.EMPTY_STATUS);
// дальше в классе делаем Response.Write(m_message.ToString());
// Response.End();
}
public int ContentLength
{
get
{
if ((this._contentLength == -1) && (this._wr != null))
{
string knownRequestHeader = this._wr.GetKnownRequestHeader(11);
if (knownRequestHeader != null)
{
try
{
this._contentLength = int.Parse(knownRequestHeader, CultureInfo.InvariantCulture);
}
catch
{
}
}
else if (this._wr.IsEntireEntityBodyIsPreloaded())
{
byte[] preloadedEntityBody = this._wr.GetPreloadedEntityBody();
if (preloadedEntityBody != null)
{
this._contentLength = preloadedEntityBody.Length;
}
}
}
if (this._contentLength < 0)
{
return 0;
}
return this._contentLength;
}
}
Обработка исключений «Maximum request length exceeded» в ASP.NET