繁体   English   中英

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

[英]ASP.NET 4.0 Webforms - global error handling troubles

经过更长时间的Winforms中断之后,我回到了ASP.NET领域 - 我又回到了应该工作的东西 - 但实际上不是......

我正在尝试实现一个全局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是首选的方法吗?无法真正找到关于什么更好用的任何硬性事实,以及为什么

在我的“开发”错误页面中,我试图在屏幕上显示错误 - 但试图获得该错误似乎难以捉摸 - 我只会得到返回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事件处理程序来处理这些命令 - 但这似乎不起作用。 每当我点击其中一个图像按钮时,我的错误页面就会被激活 - 是的,代码似乎完全绕过我在global.asax全局Application_Error处理程序! 在这种情况下,我无法在错误页面中获得有关错误的任何信息 - 一切都是null .....

解决了:

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

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

我猜你正在将items设置为Items属性,也许我可以在传输页面之前使用Server.ClearError()

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM