Ловля “Максимальной длины запроса превысила”

Я решаю проблему с

, запрос в этом случае может быть function ajaxSupprimer(url) { fetch(url, { method: 'DELETE', headers: new Headers({ ''Authorization': 'Bearer '+mytoken, 'Content-Type': 'application/json' }), }).then(refresh);

Я видел, что для провайдера аутентификации, который вы используете, ключ «Авторизация»

109
задан Jonathan Moffatt 13 August 2014 в 00:37
поделиться

4 ответа

Нет никакого простого способа поймать такое исключение, к сожалению. То, что я делаю, или переопределить метод OnError на уровне страницы или Application_Error в global.asax, затем проверить, был ли это отказ Запроса Max и, если так, передача в ошибочную страницу.

protected override void OnError(EventArgs e) .....


private void Application_Error(object sender, EventArgs e)
{
    if (GlobalHelper.IsMaxRequestExceededException(this.Server.GetLastError()))
    {
        this.Server.ClearError();
        this.Server.Transfer("~/error/UploadTooLarge.aspx");
    }
}

Это - взлом, но код ниже работ для меня

const int TimedOutExceptionCode = -2147467259;
public static bool IsMaxRequestExceededException(Exception e)
{
    // unhandled errors = caught at global.ascx level
    // http exception = caught at page level

    Exception main;
    var unhandled = e as HttpUnhandledException;

    if (unhandled != null && unhandled.ErrorCode == TimedOutExceptionCode)
    {
        main = unhandled.InnerException;
    }
    else
    {
        main = e;
    }


    var http = main as HttpException;

    if (http != null && http.ErrorCode == TimedOutExceptionCode)
    {
        // hack: no real method of identifying if the error is max request exceeded as 
        // it is treated as a timeout exception
        if (http.StackTrace.Contains("GetEntireRawContent"))
        {
            // MAX REQUEST HAS BEEN EXCEEDED
            return true;
        }
    }

    return false;
}
96
ответ дан Pona 24 November 2019 в 03:22
поделиться

Можно решить это путем увеличения максимальной длины запроса в web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <httpRuntime maxRequestLength="102400" />
    </system.web>
</configuration>

пример выше для предела 100 МБ.

20
ответ дан GateKiller 24 November 2019 в 03:22
поделиться

Поскольку GateKiller заявил, что необходимо изменить maxRequestLength. Вы, возможно, также должны изменить executionTimeout в случае, если скорость загрузки является слишком медленной. Обратите внимание, что Вы не хотите, чтобы любая из этих настроек была слишком большой иначе, Вы будете открыты для DoS-атак.

значение по умолчанию для executionTimeout составляет 360 секунд или 6 минут.

можно изменить maxRequestLength и executionTimeout с httpRuntime Элемент .

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <system.web>
        <httpRuntime maxRequestLength="102400" executionTimeout="1200" />
    </system.web>
</configuration>

РЕДАКТИРОВАНИЕ:

, Если Вы хотите обработать исключение независимо тогда, как уже был указан, необходимо будет обработать его в Global.asax. Вот ссылка на пример кода .

58
ответ дан schellack 24 November 2019 в 03:22
поделиться

Привет, решение, упомянутое Дэмиеном МакГиверном, Работает только на IIS6,

Не работает на IIS7 и ASP.NET Development Server. Я получаю страницу с сообщением «404 - файл или каталог не найден».

Есть идеи?

РЕДАКТИРОВАТЬ:

Понятно ... Это решение все еще не работает на сервере разработки ASP.NET, но у меня есть причина, по которой он не работал на IIS7 в моем случае.

Причина в том, что IIS7 имеет встроенное сканирование запросов, которое накладывает ограничение на загружаемый файл, которое по умолчанию составляет 30000000 байт (что немного меньше 30 МБ).

И я пытался загрузить файл размером 100 МБ, чтобы протестировать решение, упомянутое Дэмиеном МакГиверном (с maxRequestLength = "10240", т.е. 10 МБ в web.config). Теперь, если я загружу файл размером> 10 МБ и <30 МБ, тогда страница будет перенаправлена ​​на указанную страницу с ошибкой. Но если размер файла> 30 МБ, то отображается уродливая встроенная страница с ошибкой, отображающая «404 - Файл или каталог не найден»

. Итак, чтобы избежать этого, вы должны увеличить макс. допустимая длина содержимого запроса для вашего веб-сайта в IIS7. Это можно сделать с помощью следующей команды:

appcmd set config "SiteName" -section:requestFiltering -requestLimits.maxAllowedContentLength:209715200 -commitpath:apphost

Я установил макс. длина содержимого до 200 МБ.

После выполнения этой настройки страница успешно перенаправляется на мою страницу с ошибкой, когда я пытаюсь загрузить файл размером 100 МБ

См. http://weblogs.asp.net/jgalloway/archive/2008/01 /08/large-file-uploads-in-asp-net.aspx для получения дополнительных сведений.

9
ответ дан 24 November 2019 в 03:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: