【问题标题】:Determine if .NET sent me to custom error page?确定 .NET 是否将我发送到自定义错误页面?
【发布时间】:2010-03-15 20:26:10
【问题描述】:

web.config:

<customErrors mode="On" defaultRedirect="~/Foo.aspx" /> 

当 Foo.aspx.cs 运行时,我怎么知道是一个未捕获的异常将我发送到 Foo.aspx?

【问题讨论】:

    标签: asp.net error-handling custom-errors


    【解决方案1】:

    检查Server.GetLastError() 并检查Response.StatusCode 以确定页面被调用的原因。

    如果您在web.config 上设置customErrors 元素,则只有在出现未知状态时才会调用defautRedirect 页面,也就是说,如果您为状态代码 404 和 403 指定自定义页面,例如,您的foo.aspx 页面仅在出现不同状态时才会被调用。

    【讨论】:

      【解决方案2】:
      void Application_Error(object sender, EventArgs e)
      {
          HttpContext ctx = HttpContext.Current;
          Exception exception = ctx.Server.GetLastError();
          ctx.Server.ClearError();
          ctx.Server.Transfer("Foo.aspx?ERROR" + exception.Message);
      
      }
      

      此方法将在您转到 Foo.aspx 之前触发,因此您可以发现您来自错误而不是重定向。然后,您可以将 QueryString 变量附加到 url,以便 Foo.aspx 可以使用该数据。

      不确定您的最终目标是什么,但如果您尝试根据异常自定义错误消息出现,您可以这样处理。

      【讨论】:

      • 这看起来很简洁,但我想了解它是如何回答我的问题的?
      • GetLastError() 如果使用 Response.Redirect("Foo.aspx") 将用户发送到 Foo.aspx 将返回 null?换句话说:GetLastError() 只返回 unhandled 异常?它只返回 .NET(而不是我的代码)捕获的异常?
      • 实际上你不需要将该代码添加到已被MS慢慢弃用的global.asax。只需检查Server.GetLastError() 方法。
      【解决方案3】:

      代码:

      if (!string.IsNullOrEmpty(Request["aspxerrorpath"])) {
          ....
      }
      

      我希望有更好的东西吗?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 1970-01-01
        • 2020-07-29
        • 2015-08-01
        • 2013-05-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多