Как я могу элегантно обрабатывать исключения maxRequestLength? - PullRequest
2 голосов
/ 09 июня 2010

В моем приложении ASP.NET MVC (v2, если это имеет значение) у меня есть страница, которая позволяет пользователю загрузить файл.Я настроил maxRequestLength для своего приложения, чтобы разрешить файлы размером до 25 МБ.В качестве теста я посылаю ему файл размером 500 МБ, который выдает исключение: Maximum request length exceeded. (я знаю это только потому, что ELMAH ловит ошибку и регистрирует ее.)

В моем файле web.config я установил customErrors mode="On" с defaultRedirect, но пользователь вообще не перенаправлен, у него даже нет желтого экрана смерти.Например, в Chrome вы увидите ошибку: Error 101 (net::ERR_CONNECTION_RESET): Unknown error.

Можно ли обеспечить более элегантный пользовательский интерфейс для этой ситуации?

Ответы [ 3 ]

4 голосов
/ 17 июня 2010

Насколько мне известно, нет способа изящно обработать превышение параметра IIS "maxRequestLength".Он даже не может отобразить пользовательскую страницу с ошибкой (поскольку нет соответствующего HTTP-кода для ответа).Единственный способ обойти это - установить maxRequestLength на какое-то нелепо большое количество килобайт, например 51200 (50 МБ), а затем проверить ContentLength после загрузки файла (при условии, что запрос не истек до 90 секунд).На этом этапе я могу проверить, если файл <= 5 МБ, и отобразить дружественную ошибку. </p>

2 голосов
/ 06 ноября 2010

http://nishantrana.wordpress.com/2009/01/19/fileupload-page-cannot-be-displayed-and-maximum-request-length-exceeded-error/

Попробуйте последнее решение здесь, я попробовал и работает нормально.

0 голосов
/ 23 апреля 2015

Я справился с этой проблемой, сделав страницу недействительной (чтобы она не отправлялась назад), если выбранный файл превышает максимальную длину запроса. Это требует наличия настраиваемого элемента проверки для клиентской стороны, проверяющего контроль загрузки файла. Вот подпункт проверки сервера, для ограничения размера файла до 4Mb:

Sub custvalFileSize_ServerValidate(ByVal s As Object, ByVal e As ServerValidateEventArgs)
        'FileUpload1 size has to be under 4Mb
        If (FileUpload1.PostedFile.ContentLength > 4194304) Then
            e.IsValid = False
        Else
            e.IsValid = True
        End If
End Sub

Вот функция проверки на стороне клиента:

function custvalFileSize_ClientValidate(src,args){
    if (document.all("FileUpload1").files[0].size > 4194304){
        args.IsValid = false;
    } else {
        args.IsValid = true;
    }
}

Контроль загрузки и контроль проверки:

<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:CustomValidator ID="CustomValidator1" runat="server" BackColor="#FFFFFF" BorderColor="#FF0000"                                BorderStyle="solid" BorderWidth="0" ClientValidationFunction="custvalFileSize_ClientValidate"                    ControlToValidate="FileUpload1" Display="Dynamic" EnableClientScript="true" ErrorMessage="<b>Please upload document files of 4Mb or less.</b>"
Font-Bold="false" Font-Names="Verdana, Arial, Helvetica" Font-Size="9px" ForeColor="#FF0000"                              OnServerValidate="custvalFileSize_ServerValidate" Text="<br/><span style='font-weight:bold;font-size:12px;'>This file is too large.<br />We can only accept documents of 4Mb or less.</span>"></asp:CustomValidator>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...