From b32eaafbc8564e89dc01b4b14b2a07938f35bcd5 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 4 Apr 2019 12:26:04 +0300 Subject: [PATCH] Added global exception handler to catch unhandled exceptions from the base application. --- .../app/Volo.DocsTestApp/DocsTestAppModule.cs | 2 ++ .../Volo.DocsTestApp/Pages/Error.cshtml.cs | 3 +- .../Utils/GlobalExceptionHandlerMiddleware.cs | 34 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 modules/docs/app/Volo.DocsTestApp/Utils/GlobalExceptionHandlerMiddleware.cs diff --git a/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs b/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs index 40a6e86b81..6891c52c1e 100644 --- a/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs +++ b/modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs @@ -33,6 +33,7 @@ using Volo.Abp.VirtualFileSystem; using Volo.Docs; using Volo.Docs.Admin; using Volo.DocsTestApp.EntityFrameworkCore; +using Volo.DocsTestApp.Utils; namespace Volo.DocsTestApp { @@ -134,6 +135,7 @@ namespace Volo.DocsTestApp else { app.UseStatusCodePagesWithReExecute("/error/{0}"); + app.UseMiddleware(); } app.UseMvc(routes => diff --git a/modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs b/modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs index bbdea77925..1b79329960 100644 --- a/modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs +++ b/modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs @@ -4,6 +4,7 @@ using System.Net; using System.Threading.Tasks; using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Logging; using Serilog; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.Domain.Entities; @@ -24,7 +25,7 @@ namespace Volo.DocsTestApp.Pages var statusFeature = HttpContext.Features.Get(); if (statusFeature != null) { - Log.Warning("Handled {0} error for URL: {1}", statusCode, statusFeature.OriginalPath); + Logger.LogWarning("Handled {0} error for URL: {1}", statusCode, statusFeature.OriginalPath); } var exceptionHandlerPathFeature = HttpContext.Features.Get(); diff --git a/modules/docs/app/Volo.DocsTestApp/Utils/GlobalExceptionHandlerMiddleware.cs b/modules/docs/app/Volo.DocsTestApp/Utils/GlobalExceptionHandlerMiddleware.cs new file mode 100644 index 0000000000..da7afcd2f8 --- /dev/null +++ b/modules/docs/app/Volo.DocsTestApp/Utils/GlobalExceptionHandlerMiddleware.cs @@ -0,0 +1,34 @@ +using System; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Logging; +using Volo.Abp.AspNetCore.Uow; + +namespace Volo.DocsTestApp.Utils +{ + public class GlobalExceptionHandlerMiddleware + { + private readonly RequestDelegate _next; + private readonly ILogger _logger; + + public GlobalExceptionHandlerMiddleware(RequestDelegate next, ILogger logger) + { + _logger = logger; + _next = next; + } + + public async Task Invoke(HttpContext httpContext) + { + try + { + await _next(httpContext); + } + catch (Exception ex) + { + _logger.LogError("Handled a global exception: " + ex.Message, ex); + + httpContext.Response.Redirect("/"); + } + } + } +} \ No newline at end of file