Перенаправить на страницу ошибки - PullRequest
1 голос
/ 15 ноября 2009

Я хочу использовать Response.Redirect для перенаправления браузера при возникновении исключения.
Я также хочу передать сообщение об исключении на свою страницу ошибок.

Например:

string URL = "Page2.aspx?Exception=" + ex.ToString()
Response.Redirect(URL)

Можно ли это сделать? Это правильный синтаксис?

Ответы [ 5 ]

7 голосов
/ 15 ноября 2009

Вместо Response.Redirect, который отправляет ответ клиенту с просьбой запросить другую страницу, вы должны вызвать Server.Transfer, который немедленно запускает другую страницу и отправляет ее непосредственно клиент.

Затем вы можете поместить исключение в HttpContext.Items и прочитать его из HttpContext.Items на странице ошибок.

Например:

catch (Exception ex) {
    HttpContext.Current.Items.Add("Exception", ex);
    Server.Transfer("Error.aspx");
}

В Error.aspx вы можете получить исключение следующим образом:

<% 
    Exception error;
    if (!HttpContext.Current.Items.Contains("Exception"))
       Response.Redirect("/");  //There was no error; the user typed Error.aspx into the browser
    error = (Exception)HttpContext.Current.Items["Exception"];
%>
1 голос
/ 15 ноября 2009

Да, это сработает (с добавлением нескольких точек с запятой, и вы, вероятно, просто хотите отправить сообщение об исключении):

String URL = "Page2.aspx?Exception=" + ex.Message;
Response.Redirect(URL);
0 голосов
/ 19 ноября 2009

Мы всегда советуем не перенаправлять на страницу .aspx в случае ошибки.

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

Мы настоятельно рекомендуем людям использовать страницу .htm или что-то, что не обрабатывается средой ASP.NET для страниц с ошибками.

В ASP.NET имеется встроенная поддержка, использующая раздел customErrors файла Web.config для автоматической обработки перенаправления ошибок.

тег customError

Вы также можете посмотреть на глобальную обработку исключений, это можно сделать с помощью события Application_OnError, которое вы можете найти в global.asax

Спасибо

Phil

http://exceptioneer.com

0 голосов
/ 15 ноября 2009

Как сказал Андрей, все должно работать.

Однако, если вы ищете Управление ошибками, лучше использовать Server.GetLastError(), поэтому вы получите полный объект Exception, включая трассировку стека.

Вот статья MSDN, которая касается ошибок приложений в целом и использует Server.GetLastError().

0 голосов
/ 15 ноября 2009

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

try
{

}
catch (Exception ex)
{
    formPanel.Visible = false;
    errorPanel.Visible = true;

    // Log error
    LogError(ex);
}

Что касается сообщения об ошибке / пересылки на другую страницу:

string errorURL = "ErrorPage.aspx?message=" + ex.Message;
Response.Redirect(errorURL, true);

И не забывайте ELMAH! http://bit.ly/HsnFh

...