C# ASP.NET 4.0 Webforms-全局错误处理问题
在经历了一段较长的Winforms间歇期后,我回到了ASP.NET领域——我又回到了应该工作的东西上——但实际上不是 我试图实现一个全局ASP.NET错误处理程序和一个向开发人员显示错误的页面(在开发环境中) 在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
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吗?