C#如何在使用getLastError方法的全局错误处理程序中访问DbEntityValidationException

本文关键字:处理 错误 全局 程序 DbEntityValidationException 访问 方法 getLastError | 更新日期: 2023-09-27 17:59:03

我目前使用全局错误处理程序处理MVC应用程序中的错误。在我得到DbEntityValidationException的情况下,我希望能够深入查看错误。我知道这在catch语句中是可能的,但我想从使用getLastError方法的全局错误处理程序中访问这些数据。有可能得到这些错误吗?

这是我的全局错误处理程序代码:

protected void Application_Error()
    {
        //Global error handler
        HttpContext ctx = HttpContext.Current;
        Exception ex = ctx.Server.GetLastError();         
        ctx.Response.Clear();
        RequestContext rc = ((MvcHandler)ctx.CurrentHandler).RequestContext;
            ViewResult viewResult = new ViewResult { ViewName = "Error" };
            viewResult.ViewBag.Error = ErrorManagement.getErrorMessage(ex); //this does the heavy listing with db and email
            string controllerName = rc.RouteData.GetRequiredString("controller");
            IControllerFactory factory = ControllerBuilder.Current.GetControllerFactory();
            IController controller = factory.CreateController(rc, controllerName);
            ControllerContext cc = new ControllerContext(rc, (ControllerBase)controller);                
            viewResult.ExecuteResult(cc);
            ctx.Server.ClearError();
    }

所以我希望我能从这个异常对象中得到错误信息:

例外情况ex=ctx。Server.GetLastError();

我意识到,根据本文,一个或多个实体的验证失败。请参阅';EntityValidationErrors';属性,以获取我可以为数据库编写扩展方法的更多详细信息。保存方法,但我希望尽可能避免这种情况。

谢谢!非常感谢你的帮助。

C#如何在使用getLastError方法的全局错误处理程序中访问DbEntityValidationException

你能测试一下ex:的类型吗

if(ex is DbEntityValidationException)
{
   var typedEx = ex as DbEntityValidationException
   //Now poke typedEx to get through root cause of your failure
}