2011-02-11 2 views
6

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

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

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

спасибо.

+0

Handle где? В обработчике ошибок приложения Global.asax? В коде, вызывающем другое приложение ASP.NET (т. Е. Веб-клиент)? –

+0

Ручка в global.asax на стороне сервера. –

ответ

18

Вы можете попробовать бросить исключение как 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 
} 
+0

Отлично! Спасибо! Это оно! –

3

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

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

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

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

+0

Спасибо. Я делаю все это уже, но это не проблема. Моя проблема заключается в том, что исключение все еще бросается в global.asax, даже если перенаправление работает, и мне нужно его обрабатывать. Как я могу сказать, что исключением является HTTP 404, а не другой? –

1

В файле web.config, позволяющее задать отдельный файл для каждого кода ошибки.

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

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

2

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

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; 
+0

Нет, это чистая сторона сервера: global.asax. У меня нет проблем с поиском исключения, моя проблема заключается в том, чтобы идентифицировать его как HTTP 404. –