在IIS6上使用asp.net C#3.5自定义404页面

时间:2010-07-13 12:01:29

标签: c# asp.net iis-6 http-status-code-404

用于错误处理我有几行代码用于捕获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 个答案:

答案 0 :(得分:4)

我认为您应该使用GetHttpCode()方法进行检查。

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

答案 1 :(得分:2)

找不到页面不会抛出异常,404错误是Http响应代码。如果您尝试为404处理设置自定义错误页面,可以使用

进行设置
<customErrors>
web.config中的

标签

看看这些文章......

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

戴夫

答案 2 :(得分:1)

来自MSDN docs

ErrorCode获取错误的HRESULT。 (继承自ExternalException)。

GetHttpCode()获取返回客户端的HTTP响应状态代码。

HRESULT 0x80004005表示Generic Error

答案 3 :(得分:1)

我认为您不想使用ErrorCode - 这是内部错误。尝试在HttpException对象上使用GetHttpCode()。这应该返回你正在寻找的404。

if (hex.GetHttpCode() == 404)