public override void OnException(ExceptionContext context) { // 1. Exception Is handled so that Request Processing is completed // and the result return process starts context.ExceptionHandled = true; // 2. Read the exception Message string message = context.Exception.Message; // 3. Returning result var viewResult = new ViewResult(); // 3a. Create a ViewDataDiciotnary and define Key/Values for it var viewData = new ViewDataDictionary(modelMetadata, context.ModelState); dbContext.ExceptionLogs.Add(new ExceptionLog { ControllerName = context.RouteData.Values["controller"].ToString(), ActionName = context.RouteData.Values["action"].ToString(), Date = DateTime.Now, ExceptionMesaage = message, StackTrace = context.Exception.StackTrace }) ; dbContext.SaveChanges(); // 3b. define keys for viewData viewData["controller"] = context.RouteData.Values["controller"]; viewData["action"] = context.RouteData.Values["action"]; viewData["errorMessage"] = message; viewResult.ViewName = "CustomError"; viewResult.ViewData = viewData; context.Result = viewResult; }
public async Task InvokeAsync(HttpContext context, VodafoneExceptionDbContext exceptiondbContext) { try { // if no exception while processing the request move to next middleware await request(context); } catch (Exception ex) { exceptiondbContext.ExceptionLogs.Add(new ExceptionLog { ExceptionMesaage = ex.Message, Date = DateTime.Now }); exceptiondbContext.SaveChanges(); // logic for exception handling and generating response await HandleErrorAndWriteResponse(context, ex); } }