Как перенаправить из Application_Error в ASP.NET MVC 2? - PullRequest
0 голосов
/ 13 августа 2010

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

При отсутствии кода я получаю очень загадочную ошибку «Невозможно отобразить страницу» при загрузке большого файла ( не знаменитая желтая страница с ошибкой ASP) - такая же ошибка браузера вы получаете, когда вы находитесь в автономном режиме. Это кажется мне странным и, вероятно, как-то связано с этой проблемой.

Я добавил это в свой файл Global.asax:

  //simplification
  public void Application_Error(object sender, EventArgs e)
  {
      Response.Redirect("http://www.google.com", false); //This IS getting hit
  }

В моем файле Web.config отключены пользовательские ошибки (и должны оставаться такими). ​​

Кажется, довольно просто, верно? Но по какой-то причине этот редирект просто ничего не делает. Это получает удар. Это выполняет эту строку. Я пробовал это с endResponse, установленным в true; без разницы.

Я пробовал использовать следующие две строки перед перенаправлением:

Response.Clear();
Server.ClearError();

Первое, что я предполагаю, - это перенаправление, возникающее после отправки заголовков (что не так); во-вторых, я не совсем уверен, что это изменит, но я видел этот код в похожих вопросах / ответах StackOverflow, поэтому я решил попробовать.

Итак, есть ли что-то особенное в этой конкретной ошибке, которая делает невозможным перенаправление?

Если вы хотите попробовать это сами (и посмотрите, что я имею в виду под странной ошибкой без страницы), вот несколько быстрых копировальных паст, которые нужно добавить в стандартное приложение VS для MVC:

Views -> Home -> Index.aspx

<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <form enctype="multipart/form-data" method="post" action="<%= Url.Action("Upload") %>">
      <input type="file" name="required-to-post" />
      <input type="submit" value="Upload" />
    </form>
</asp:Content>

Controllers -> HomeController.cs

public ActionResult Upload()
{
    return View("Index");
}

Global.asax

protected void Application_Error()
{
    Response.Redirect("http://www.google.com", false);
}

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

Ответы [ 3 ]

3 голосов
/ 10 сентября 2010

Мне удалось исправить мою проблему.Обработка ошибок также отправляла электронное письмо с подробным описанием ошибки.Это было еще одно исключение.Но исключение не может всплыть, поэтому я не смог его увидеть.

Короче, убедитесь, что ничто не вызывает другое исключение и все должно работать нормально.

И вопреки тому, чтодругой постер опубликован, вам не нужно переписывать весь блок обработки ошибок ... Боже, я ненавижу, когда люди делают это.«О, я знаю ответ на ваш вопрос. Просто переделайте все это, следуя этому примеру!».Как насчет того, чтобы прочитать код и попытаться помочь отладить его?Если не можешь, просто не отвечай.Если вы отвечаете на вопрос, это не значит, что вы умнее, чем тот, кто его задает.

0 голосов
/ 20 марта 2011

Это довольно старый вопрос, который я решил некоторое время назад, хотя я никогда не писал здесь ответ.

Если я правильно помню, проблема была на самом деле с сервером IIS, а не с приложением MVC. У самого сервера была максимальная длина запроса, и когда оно нарушалось, все происходило очень странно.

Изменяя максимальный размер запроса к серверу, я считаю, что проблема исчезла. Но я не знаю, возможно ли это на локальном сервере, который запускается VS при попытке отладки приложения MVC.

В любом случае, я считаю, что я делал что-то принципиально неправильное, пытаясь разрешить загрузку больших файлов через HTML-форму. Вместо этого я реализовал асинхронный загрузчик файлов, так что мне не нужно об этом беспокоиться - он обеспечивает гораздо лучший опыт работы с пользователем, и мне больше не нужно ломать голову над этим.

0 голосов
/ 09 сентября 2010

вам может пригодиться пункт, помеченный как ответ в этом сообщении: Как правильно обработать 404 в ASP.NET MVC?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...