因此,我创建了一个自定义异常类(让我们称之为CustomException
)以及Exception
类中找不到的一些自定义属性。在global.asax.cs文件中,只要发生异常就会调用Application_Error
方法。我使用Server.GetLastError()
来抓取触发Application_Error
方法的异常。问题是Server.GetLastError()
只抓取Exception
对象而不是与其自定义属性一起抛出的CustomException
对象。基本上,当CustomException
检索时,Exception
会被细分为Server.GetLastError()
个对象,从而失去与CustomException
相关联的自定义属性。
GetLastError()
是否有办法真正检索CustomException
对象,而不是精简Exception
版本?这是为了将错误存储在数据库表中,其中包含的信息比Exception
通常提供的信息要多。
Application_Error
:
protected void Application_Error(object sender, EventArgs e)
{
// This var is Exception, would like it to be CustomException
var ex = Server.GetLastError();
// Logging unhandled exceptions into the database
SystemErrorController.Insert(ex);
string message = ex.ToFormattedString(Request.Url.PathAndQuery);
TraceUtil.WriteError(message);
}
CustomException
:
public abstract class CustomException : System.Exception
{
#region Lifecycle
public CustomException ()
: base("This is a custom Exception.")
{
}
public CustomException (string message)
: base(message)
{
}
public CustomException (string message, Exception ex)
: base(message, ex)
{
}
#endregion
#region Properties
// Would like to use these properties in the Insert method
public string ExceptionCode { get; set; }
public string SourceType { get; set; }
public string SourceDetail { get; set; }
public string SystemErrorId { get; set; }
#endregion
}
答案 0 :(得分:0)
将Server.GetLastError的结果强制转换为CustomException:
var ex = Server.GetLastError() as CustomException;
请记住,在某些情况下,您的CustomException可能不是StackTrace中的顶级异常,在这种情况下,您需要浏览InnerExceptions以找到正确的异常。
请查看@ scott-chamberlain关于如何设计自定义例外的链接。