gpt4 book ai didi

asp.net-mvc - 为什么 Elmah 不识别我自己的异常派生类型?

转载 作者:行者123 更新时间:2023-12-02 05:39:50 25 4
gpt4 key购买 nike

我刚刚实现了用于登录我的 MVC3 应用程序的 Elmah,当然一切都很好,除了当我使用信号记录自定义异常时,Elmah 似乎“看到”了我的自定义异常的 InnerException 属性,但是不是自定义异常本身。

当我使用下面的代码发出异常信号时,我没有像预期的那样在我的错误日志中看到“CtsDataException:错误”,而是看到了“DbEntityValidation:一个或多个实体的验证失败。”,内部异常及其消息。如果我打开日志项,我会看到我的自定义异常已被正确记录,所以看起来“异常描述符”是错误的,而不是实际的日志条目。

我做错了什么?

PS,我的自定义异常是这样的:

public class CtsDataException: Exception
{
public CtsDataException(string message, Exception innerException): base(message, innerException)
{
ValidationResults = new List<CtsDbValidationResult>();
var vex = innerException as DbEntityValidationException;
if (vex != null)
{
ValidationResults = vex.EntityValidationErrors.Select(e => new CtsDbValidationResult(e)).ToList();
}
}
public IEnumerable<CtsDbValidationResult> ValidationResults { get; set; }
}

信令代码如下所示:

protected void HandleDbEntityValidationException(DbEntityValidationException vex, string message)
{
var ctsEx = new CtsDataException(message, vex);
ErrorSignal.FromCurrentContext().Raise(ctsEx);
}

HandleDbEntityValidationException 在我的基本 Controller 上。它在派生 Controller 中调用如下:

catch (DbEntityValidationException vx)
{
var msg = string.Format("Error updating employee '{0}'", entity.RefNum);
HandleDbEntityValidationException(vx, msg);
}

最佳答案

我自己做了一些测试,得出的结论是,不是 ELMAH 选择只报告 InnerException。如果您查看错误的详细信息,然后单击 Original ASP.NET error page,您将看到发生的原始黄色屏幕将异常详细信息列为 InnerException 而不是抛出的主要自定义异常。堆栈跟踪进一步显示了原来抛出的自定义异常。这是 ELMAH 在记录错误时使用的信息。

我的测试包括创建一个 CustomException 类,它只是从 Exception 继承。然后我简单地调用:

throw new CustomException("error!", new NullReferenceException());

... 报告的是 NullReferenceExceptionCustomException 仅出现在堆栈跟踪中。

关于asp.net-mvc - 为什么 Elmah 不识别我自己的异常派生类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11169237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com