Самый простой способ - обработать его в методе OnError самой страницы.
Я думаю, что это работает только в .NET 4.0, поскольку свойство WebEventCode задокументировано как NEW в .NET 4.0.
protected override void OnError(EventArgs e)
{
Exception err = Server.GetLastError();
if (err is HttpException)
{
if ((err as HttpException).WebEventCode == 3004)
{
Context.Items["error"] = "File exceeded maximum allowed length.";
Server.Transfer( Context.Request.Url.LocalPath );
return;
}
}
base.OnError(e);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (!IsPostBack)
{
string error = Context.Items["error"] as string;
if (!string.IsNullOrEmpty( error ))
showErrorMessage( error );
}
}
То, что я сделал, было:
- получить последнюю ошибку с Server.GetLastError
- проверьте, что это «Максимальная длина запроса превышена». ошибка (WebEventCode == 3004).
- добавил значение в Context.Items коллекций, чтобы пометить запрос как ошибку
- передать запрос обратно на саму страницу с помощью Server.Transfer (Context.Request.Url.LocalPath)
- метод OnLoad страницы проверяет наличие флага ошибки и отображает сообщение, если оно присутствует
Это гарантирует, что ошибка полностью обрабатывается на запрашиваемой странице, а страница способна сообщать об ошибках.
Также обратите внимание, что, хотя браузер в конечном итоге получит правильный ответ, браузер может потратить время на загрузку всего запроса, прежде чем он обработает ответ сервера и отобразит его. Такое поведение, вероятно, определяется как часть взаимодействия сервер / браузер в протоколе HTTP, поэтому, вероятно, с этим ничего не поделаешь.