Я хочу показать страницу пользовательской ошибки, если пользователь пытается загрузить файл, превышающий максимальную длину запроса.Как перенаправить с Application_Error в ASP.NET MVC 2?
Не имея никакого кода, при загрузке большого файла появляется очень загадочная ошибка «Невозможно отобразить страницу» (не известная страница с ошибкой 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, поэтому я решил попробовать.
Итак - есть ли что-то особенное в этой конкретной ошибке, которая делает невозможным перенаправление?
Если вы хотите попробовать его для себя (и посмотреть, что я имею в виду о странных ошибках не-странице), вот некоторая быстро copypasta добавить в стандартном MVC приложение VS в:
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 МБ), и он должен дать эту загадочную ошибку (без перенаправления).