перенаправление на ошибку при превышении размера файла - PullRequest
2 голосов
/ 04 января 2011

Я пытаюсь направить пользователя на страницу ошибки, когда максимальный размер загружаемого файла превышает. Для этого я делаю следующее:

public void Init(HttpApplication application)
    {
        application.BeginRequest += new EventHandler(application_BeginRequest);
    }

    void application_BeginRequest(object sender, EventArgs e)
    {
        HttpApplication application = (HttpApplication)sender;
        HttpContext context = application.Context;
        if (context.Request.ContentLength > 4096000)
        {
            context.Response.Redirect("~/Error.aspx");
        }
    }
    public void Dispose()
    {
    }

Но при загрузке файла с размером, превышающим максимальный размер файла, он показывает ошибку «сброса соединения». Как мне это сделать.

Ответы [ 7 ]

0 голосов
/ 19 января 2011

После сообщения причиной может быть только перенаправление на локальный сайт:

Это не работает, когда сервер является локальным (либо с помощью localhost, локальный ip или http://machinename/). браузер просто реагирует как сервер полностью сбросил соединение - соединение сброс по пиру / соединение было сброшено (FF) / не может отобразить веб-страницу (IE).

0 голосов
/ 18 января 2011

Использование Transfer.Redirect ()

0 голосов
/ 18 января 2011

Вы можете использовать инструментарий AsyncFileUpload, а затем перехватить ошибку на стороне клиента и перенаправить на страницу ошибки.

AsyncFileUpload: как скрыть ошибку предупреждения о превышении максимальной длины запроса?

<asp:AsyncFileUpload ID="fileUpload" 
                     runat="server" OnClientUploadError="onUploadError"
                     OnClientUploadComplete="uploadComplete"
                     OnUploadedComplete="OnUploadComplete" />

<script language="javascript" type="text/javascript">

     function onUploadError()
     {
          //Redirect to error page.
     }

     function uploadComplete()
     {

     }


 </script>
0 голосов
/ 14 января 2011

Я считаю, что для того, чтобы сделать это правильно из обработчика, вам нужно будет прочитать все данные из запроса перед отправкой ответа / перенаправления.Кроме того, вы можете сделать это из фильтра ISAPI и избежать необходимости читать данные.

0 голосов
/ 04 января 2011

Хорошо, вы, вероятно, получаете исключение ThreadAbortException, поэтому соединение сбрасывается.

Пожалуйста, обратитесь к этой статье базы знаний для обходного пути: ThreadAbortException возникает, если вы используете Response.End, Response.Redirect или Server.Transfer .

- Павел

0 голосов
/ 04 января 2011

Среда выполнения ASP.NET может отклонить запрос даже до запуска вашего приложения. Проверьте максимальную длину запроса, установленную в web.config - значение должно быть больше, чем ожидаемое вашим приложением:

IIS6 / IIS7 (классический конвейер И интегрированный конвейер):

<system.web>
  <!-- The value is in KB -->
  <httpRuntime maxRequestLength="4096" />
</system.web>

IIS7 (интегрированный конвейер):

<system.webServer> 
  <security> 
    <requestFiltering> 
      <!-- The value is in bytes -->
      <requestLimits maxAllowedContentLength="209715200" />
    </requestFiltering>
  </security>
</system.webServer>

Надеюсь, это поможет.

- Павел

...