Я хочу показать пользовательскую страницу ошибки, если пользователь пытается загрузить файл, размер которого превышает максимальную длину запроса.
При отсутствии кода я получаю очень загадочную ошибку «Невозможно отобразить страницу» при загрузке большого файла ( не знаменитая желтая страница с ошибкой 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 МБ), и он должен выдать эту загадочную ошибку (без перенаправления).