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

C# ASP.NET 4.0 Webforms-全局错误处理问题,c#,error-handling,asp.net-4.0,webforms,C#,Error Handling,Asp.net 4.0,Webforms,在经历了一段较长的Winforms间歇期后,我回到了ASP.NET领域——我又回到了应该工作的东西上——但实际上不是 我试图实现一个全局ASP.NET错误处理程序和一个向开发人员显示错误的页面(在开发环境中) 在global.asax.cs中,我发现了如下未处理的错误: private void Application_Error(object sender, EventArgs e) { Exception ex = Server.GetLastError(); if (e

在经历了一段较长的Winforms间歇期后,我回到了ASP.NET领域——我又回到了应该工作的东西上——但实际上不是

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

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
。我已经定义了一个
myGridViewHandlerRowCommand
事件处理程序来处理这些命令,但这似乎不起作用。每当我点击其中一个图像按钮时,我的错误页面就会被激活——是的,代码似乎完全绕过了
global.asax中的我的全局
Application\u错误处理程序!在这种情况下,我无法在错误页面中获取有关错误的任何信息-所有内容均为空….

我想,当您将EXCEPTION设置为
Items
属性时,也许我可以在传输页面之前使用
服务器.ClearError()

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

已解决: 问题在于,在Ajax调用过程中出现了一些错误,异步错误处理与通过
Application\u OnError
进行的“正常”错误处理不同,它有自己的“路径”来访问错误页面。这就是我的错误页面被点击的原因,但是没有找到错误


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

旁注,您考虑过使用Elmah吗?