В ASP.NET, как определить / обработать 404 исключения? - PullRequest
6 голосов
/ 11 февраля 2011

Мне нужно обработать 404 исключения иначе, чем все остальные типы.Каков наилучший способ идентифицировать эти 404 исключения (отличить их от других исключений)?

Проблема в том, что нет специального класса исключений для 404 ошибок, я получаю обычное исключение System.Web.HttpException с Message =«Файл не существует».

Стоит ли просто использовать для этого сообщение об исключении или есть лучший способ?

Спасибо.

Ответы [ 4 ]

18 голосов
/ 11 февраля 2011

Вы можете попытаться вызвать исключение как HttpException, а затем использовать метод GetHttpCode, чтобы проверить, является ли оно 404 или нет.

Например:

Exception ex = Server.GetLastError();

HttpException httpEx = ex as HttpException;

if (httpEx != null && httpEx.GetHttpCode() == 404)
{
   //do what you want for 404 errors
}
3 голосов
/ 11 февраля 2011

Я бы посоветовал вам настроить приложение на перенаправление 404 ошибок на определенную страницу, например ~/FourOhFour.aspx. На этой странице вы можете просмотреть параметр строки запроса aspxerrorpath, который сообщит о странице, которую пользователь пытался посетить. Отсюда вы можете делать всякие интересные вещи, от регистрации 404 до отправки по электронной почте сообщения, попытки определить правильный URL-адрес и автоматического перенаправления пользователя на него.

Чтобы настроить ваше веб-приложение для перенаправления пользователя на пользовательскую страницу в виде 404, добавьте следующую разметку к web.config в разделе <system.web>:

<customErrors mode="On" defaultRedirect="~/GeneralError.aspx">
    <error statusCode="404" redirect="~/FourOhFour.aspx" />
</customErrors>

Для получения дополнительной информации см .:

2 голосов
/ 11 февраля 2011

Вы можете поймать исключение. Вы пытаетесь поймать это в клиентском приложении, правильно?

HttpWebRequest req = ( HttpWebRequest )WebRequest.Create( someURL );
try
{
    HttpWebResponse resp = req.GetResponse();
}
catch( WebException webEx )
{
   if( webEx.Response != null )
   {
      HttpWebResponse response = webEx.Response as HttpWebResponse;
      switch( response.StatusCode )
      {
         case HttpStatusCode.NotFound:
             // do something
             break;
1 голос
/ 11 февраля 2011

В файле Web.Config вы можете указать отдельный файл для каждого кода ошибки.

<customErrors mode="Off" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="404" redirect="FileNotFound.aspx" />
    </customErrors>
...