如何在Global.ASAX中访问Application_Error事件的对象属性?

时间:2016-06-13 08:34:11

标签: c# asp.net casting

我目前正在编写一个通用错误处理程序,其中包含应用程序的日志记录,应该从发送方对象中提取有用的信息。

在我提出问题之前,请先给我一些背景知识:

我在此目的中使用的 Global.asax 中的 Application_Error 处理程序定义如下:

protected void Application_Error(Object sender, EventArgs e)

当我在此方法中设置断点时,我通过本地窗口获取发件人的许多有用信息: Sender_Object_Global.asax

在类型列中,Visual Studio建议对象的类型为ASP.global_asax,但这似乎是一种人工类型,因为当我尝试将其转换为

var senderInfo = (ASP.global_asax)sender;

我收到以下错误:

  

CS0246:类型或命名空间' ASP'找不到(你错过了使用指令或汇编引用吗?)

问题:

  1. 事件参数:有没有办法将 sender 投射到合适的类类型中,其中包含Locals窗口显示的所有信息? (注意我不需要调试器显示的静态和非公共成员)
  2. 异常对象:同样,这也可以为异常对象实现吗? (您可以在屏幕截图中看到exc的类型为System.Exception,但确切的类型为System.Web.HttpUnhandledException。这对exc.InnerException特别有用,因为我们在这里获取有关发生此异常的原因的真实信息。)

        var exc = Server.GetLastError();
        var innerExc = exc.InnerException;
    
  3. N.B。我在Stackoverflow(herethere)中发现了一些类似的问题,但它们并不重复,因为它们处理不同的主题。

1 个答案:

答案 0 :(得分:4)

您可以使用 <input type="text" onBlur="check(this.value);" /> Function check(id) { alert(id); }

Sample debug image