пользовательская страница 404 с asp.net C # 3.5 на IIS6 - PullRequest
3 голосов
/ 13 июля 2010

для обработки ошибок У меня есть несколько строк кода для отлова каждой ошибки в global.asax: void Application_Error(object sender, EventArgs e) содержимое функции выглядит следующим образом:

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); и значение кода ошибки равно -2147467259

Почему это не 404?

Ответы [ 4 ]

4 голосов
/ 13 июля 2010

Думаю, вам следует проверить методом GetHttpCode().

 HttpException hex = (HttpException)objErr;
 if (hex.GetHttpCode() == 404)
     Response.Redirect("404.aspx?msg=" + hex.Message);
2 голосов
/ 13 июля 2010

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

<customErrors>

в вашем файле web.config

. Посмотрите эти статьи...

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

Дейв

1 голос
/ 13 июля 2010

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

if (hex.GetHttpCode() == 404)
1 голос
/ 13 июля 2010

С MSDN документы :

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

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

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

...