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';属性,以获取我可以为数据库编写扩展方法的更多详细信息。保存方法,但我希望尽可能避免这种情况。
谢谢!非常感谢你的帮助。
你能测试一下ex:的类型吗
if(ex is DbEntityValidationException)
{
var typedEx = ex as DbEntityValidationException
//Now poke typedEx to get through root cause of your failure
}