2010-07-13 2 views
3

для обработки ошибок у меня есть несколько строк кода для ловли каждую ошибку в global.asax : void Application_Error(object sender, EventArgs e) содержание функции выглядит следующим образом:пользовательских 404 страницы с asp.net C# 3.5 на IIS6

try 
    { 
     Exception objErr = Server.GetLastError().GetBaseException(); 

     if (!(objErr is HttpException)) 
     { 
      shop.BLL.Utility.Errorlog.WriteError(objErr, "Global.asax caught an Exception"); 
     } 
     else 
     { 
      HttpException hex = (HttpException)objErr; 
      if (hex.ErrorCode == 404) 
       Response.Redirect("404.aspx?msg=" + hex.Message); 
      else 
      { 
       shop.BLL.Utility.Errorlog.WriteError(hex, "Global.asax caught an HttpException code: " + hex.ErrorCode); 
      } 
     } 

    } 
    catch { } 

    Server.ClearError(); 

теперь вот вещь: когда я иду blabla.aspx, который не существует, она заканчивается на линии shop.BLL.Utility.Errorlog.WriteError(hex, "Global.asax caught an HttpException code: " + hex.ErrorCode); и значение ErrorCode является -2147467259

Почему не 404?

ответ

4

Я думаю, вы должны проверьте с помощью метода GetHttpCode().

HttpException hex = (HttpException)objErr; 
if (hex.GetHttpCode() == 404) 
    Response.Redirect("404.aspx?msg=" + hex.Message); 
1

От MSDN docs:

ErrorCode Получает HRESULT ошибки. (Унаследовано от ExternalException).

GetHttpCode() Получает код ответа HTTP-ответа для возврата клиенту.

HRESULT 0x80004005 означает Generic Error.

2

Страница не найдена, не генерирует исключения, ошибка 404 является кодом ответа Http. Если вы пытаетесь настроить страницу ошибки для 404 обработки, вы можете установить его с помощью

<customErrors> 

тег в вашем web.config

взглянуть на эти статьи ...

http://aspnetresources.com/articles/CustomErrorPages и http://www.asp.net/hosting/tutorials/displaying-a-custom-error-page-cs

Dave

1

Я не думаю, что вы хотите использовать ErrorCode - это для внутренней ошибки. Попробуйте использовать GetHttpCode() для объекта HttpException. Это должно вернуть 404, которые вы ищете.

if (hex.GetHttpCode() == 404)