【问题标题】:ASP.NET Custom Error except 404 errors,ASP.NET 自定义错误,除了 404 错误,
【发布时间】:2009-03-20 04:40:54
【问题描述】:

我已经设置自定义错误如下..

protected void Application_Error(Object sender, EventArgs e)
{
    Exception ex = HttpContext.Current.Server.GetLastError();
    if (ex is HttpUnhandledException && ex.InnerException != null)
        ex = ex.InnerException;
    if (ex != null)
    {
        try
        {
            Logger.Log(LogEventType.UnhandledException, ex);
        }
        catch
        { }
    }

    HttpContext.Current.Server.ClearError();
    Response.Redirect(MyCustomError);

}

我想知道是否可以检测这个错误是不是404错误,然后显示默认的404错误?

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    我不得不说我真的很困惑,为什么你要清除发生的任何错误,然后首先重定向到自定义错误页面。

    也许会改变:

    HttpContext.Current.Server.ClearError();
    Response.Redirect(MyCustomError);
    //to
    if (!(ex is HttpException && 404 == ((HttpException)ex).getHttpCode())){
      HttpContext.Current.Server.ClearError();
      Response.Redirect(MyCustomError);
    }
    

    否则,不要进行任何这些检查,并留下任何未找到文件的异常。让它们由您通过框架在web.config 中定义的自定义错误处理程序进行处理。

    <customErrors mode="RemoteOnly" defaultRedirect="~/Error/500.htm">
        <error statusCode="500" redirect="~/Error/500.htm"/>
        <error statusCode="404" redirect="~/Error/404.htm"/>
    </customErrors>
    

    如果您没有看到想要的处理方式,请将模式更改为“开启”。

    如果您需要抛出 404,可能是因为请求的项目的 ID 已从 DB 中删除,则抛出相应的 HttpException 错误。

    【讨论】:

    • 语法更正:if (!(ex is HttpException && 404 == ((HttpException)ex).GetHttpCode()))
    • @Ash Machine 谢谢。我相信刚刚加入的一项功能允许任何人提出修改建议,因此,下次您可以这样做。
    【解决方案2】:

    我很确定对静态文件的请求不会通过 Asp.Net 框架 - 只有以 .aspx 结尾的文件才会通过。因此,对不存在的静态文件的请求将从 IIS 获得 404,但不会被 asp.net 处理。

    您可以执行与本页标题“IIS 自定义 401 错误”下所述类似的操作:

    http://msdn.microsoft.com/en-us/library/ms972958.aspx

    它的要点是在 iis 中创建一个自定义错误处理程序,将用户发送到某个静态 htm 文件,该文件将他们重定向到您的特殊 404 处理程序 aspx 页面。

    【讨论】:

    • 是的,但是 404 具有 aspx 扩展名?
    • 啊 - 在这种情况下,在调试模式下运行它,在 Application_Error 函数上放置一个断点,然后看看在 Watch 窗口中可以看到什么。
    猜你喜欢
    • 1970-01-01
    • 2013-06-18
    • 2012-07-06
    • 1970-01-01
    • 2012-07-03
    • 2016-09-27
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    相关资源
    最近更新 更多