ASP.NET 4.0 Webforms - 全局错误处理问题

时间:2013-01-10 12:18:02

标签: c# error-handling asp.net-4.0 webforms

经过更长时间的Winforms中断之后,我又回到了ASP.NET领域 - 我又回到了那些所谓的工作的东西 - 但实际上不是...... / p>

我正在尝试实现一个全局ASP.NET错误处理程序和一个向开发人员显示错误的页面(在DEV环境中)。

global.asax.cs中,我抓住了这样的未处理错误:

private void Application_Error(object sender, EventArgs e) 
{
    Exception ex = Server.GetLastError();

    if (ex != null) 
    {
       HttpContext.Current.Items["exception"] = ex;

       // do a bit more stuff here, like logging the error and so on 

       Server.Transfer("~/Error.aspx");
    }
}

PS:作为旁注:正在使用Server.GetLastError()HttpContext.Current.Error首选方式?无法找到关于什么更好使用的任何确凿事实,以及为什么

并且在我的“dev”错误页面中,我试图在屏幕上显示错误 - 但是尝试获取该错误似乎难以捉摸 - 我只会回来null ...

public partial class Error : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e) 
    {
        // both "exc" as well as "exc2" always end up being "null" ...
        Exception exc = HttpContext.Current.Error;
        Exception exc2 = HttpContext.Current.Items["exception"] as Exception;

        // display error .....
    }

为什么?我假设如果我使用Server.Transfer()那个错误仍然存​​在(我永远不会调用Server.ClearError()),如果这不起作用,那么我希望至少将异常放入HttpContext.Items可以工作,因为仍然是在同一个HTTP上下文/请求中运行的代码 - 没有?

我在这里缺少什么?以及如何“传输”异常信息如何将global.asax.cs中的异常信息捕获到另一个错误页面?

感谢所有提示和指示!


更新:好的 - 似乎总是不会发生这种情况 - 在某些情况下,这种机制运行得很好(正如我原本预期的那样)。

但是我在包含ImageButton的网页上有一个网格,用于编辑和删除等操作。我已经定义了一个MyGridViewHandleRowCommand事件处理程序来处理这些命令 - 但这似乎不起作用。每当我点击其中一个图像按钮时,我的错误页面就会被激活 - 是的,代码似乎完全绕过 Application_Error中的全局global.asax处理程序!在这种情况下,我无法在错误页面中获得有关错误的任何信息 - 一切都是空的.....

3 个答案:

答案 0 :(得分:1)

解决:

问题是在Ajax调用期间出现了问题,并且异步错误处理不能通过Application_OnError处理“正常”错误处理,但有自己的“路径”来到达错误页面。这就是我的错误页面被击中的原因,但没有找到错误。

除此之外,全局错误处理(对于非Ajax调用)按预期和编码工作。

答案 1 :(得分:0)

我猜你正在设置Items属性的异常,也许我可以在转移页面之前使用Server.ClearError()

答案 2 :(得分:0)

在我的代码中,我将异常放在Session中并使用重定向到错误页面。