Elmah在记录之前修改当前异常

时间:2014-02-17 11:09:56

标签: c# asp.net-mvc error-handling elmah

我有一个Asp.net MVC项目正在使用Elmah来记录例外情况。

该项目正在使用Entity Framework,它可以抛出DbEntityValidationException异常,其中指定哪些属性无法保存到数据库中。

我正在尝试捕获该异常(由Elmah未详细记录),并将信息附加到当前异常。

问题在于,如果我修改当前的异常,Elmah不会捕获更改。相反,我必须使用DbEntityValidationException的详细信息引发另一个异常,但这将创建两个连续的错误日志。

在elmah记录之前,可以在异常中添加一些额外的文本吗?

public class ErrorHandleAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext.ExceptionHandled == true)
            return;

        Exception exception = filterContext.Exception;

        Exception dbEntityException = exception;
        while (dbEntityException != null && dbEntityException is System.Data.Entity.Validation.DbEntityValidationException == false)
        {
            dbEntityException = dbEntityException.InnerException;
        }

        if (dbEntityException != null && dbEntityException is System.Data.Entity.Validation.DbEntityValidationException)
        {
            DbEntityValidationException dbEntityValidationException = dbEntityException as DbEntityValidationException;

            StringBuilder sb = new StringBuilder();
            sb.AppendLine("Db Entity Validation Exception");
            foreach (var item in dbEntityValidationException.EntityValidationErrors)
            {
                sb.AppendFormat("Entity: {0} {1}", item.Entry.Entity.ToString(), Environment.NewLine);
                foreach (var error in item.ValidationErrors)
                {
                    sb.AppendFormat("{0}: {1} {2}", error.PropertyName, error.ErrorMessage, Environment.NewLine);
                }
            }

            exception = new Exception(sb.ToString(), exception);
            ErrorSignal.FromCurrentContext().Raise(exception);
        }
    }
}

0 个答案:

没有答案