Ошибка приложения ASP.NET 404? - PullRequest
2 голосов
/ 14 июля 2009

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

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        Dim ex As New Exception( _
            String.Format("Error on page: '{0}'.", HttpContext.Current.Request.Url), _
            Server.GetLastError())

        Dim uid As Guid = Log.FatalError(ex)
        Server.Transfer(String.Concat("~\\GlobalError.aspx?error=", uid))
End Sub

В моем web.config у меня есть:

<customErrors mode="On" defaultRedirect="GlobalError.aspx">
  <error statusCode="404" redirect="PageNotFound.aspx" />
</customErrors>

Всякий раз, когда пользователь пытается загрузить несуществующую страницу, он получает страницу GlobalError.aspx, а не страницу PageNotFound.aspx. Я посмотрел в событии Application_Error и обнаружил, что Response StatusCode был равен 200, а последней ошибкой сервера было «Страница« foo.aspx »не найдена».

Что мне нужно сделать, чтобы это работало правильно?

Ответы [ 2 ]

5 голосов
/ 14 июля 2009

В функции Application_Error вы должны только Server.Transfer, если ошибка не найдена страница / ошибка 404. В этих случаях предоставьте ASP.NET возможность выполнять перенаправление с использованием настроек в файле web.config.

Вы можете выяснить, если это 404, используя следующее:

Exception ex = Server.GetLastError();
if (ex.GetType() == typeof(HttpException))
{
  HttpException httpEx = (HttpException)ex;
  if(httpEx.GetHttpCode() == 404) {
    return;
  }
}
Server.Transfer("~/error.aspx");
0 голосов
/ 14 июля 2009

Для начала вам нужно решить, почему они получают GlobalError.aspx. Вы показали нам две возможности; может быть, есть еще.

Измените имя одной из этих записей на GlobalErrorX.aspx и посмотрите, что произойдет.

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