Browse Source

Added global exception handler to catch unhandled exceptions from the base application.

pull/997/head
Alper Ebicoglu 7 years ago
parent
commit
b32eaafbc8
  1. 2
      modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs
  2. 3
      modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs
  3. 34
      modules/docs/app/Volo.DocsTestApp/Utils/GlobalExceptionHandlerMiddleware.cs

2
modules/docs/app/Volo.DocsTestApp/DocsTestAppModule.cs

@ -33,6 +33,7 @@ using Volo.Abp.VirtualFileSystem;
using Volo.Docs; using Volo.Docs;
using Volo.Docs.Admin; using Volo.Docs.Admin;
using Volo.DocsTestApp.EntityFrameworkCore; using Volo.DocsTestApp.EntityFrameworkCore;
using Volo.DocsTestApp.Utils;
namespace Volo.DocsTestApp namespace Volo.DocsTestApp
{ {
@ -134,6 +135,7 @@ namespace Volo.DocsTestApp
else else
{ {
app.UseStatusCodePagesWithReExecute("/error/{0}"); app.UseStatusCodePagesWithReExecute("/error/{0}");
app.UseMiddleware<GlobalExceptionHandlerMiddleware>();
} }
app.UseMvc(routes => app.UseMvc(routes =>

3
modules/docs/app/Volo.DocsTestApp/Pages/Error.cshtml.cs

@ -4,6 +4,7 @@ using System.Net;
using System.Threading.Tasks; using System.Threading.Tasks;
using Microsoft.AspNetCore.Diagnostics; using Microsoft.AspNetCore.Diagnostics;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using Serilog; using Serilog;
using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
using Volo.Abp.Domain.Entities; using Volo.Abp.Domain.Entities;
@ -24,7 +25,7 @@ namespace Volo.DocsTestApp.Pages
var statusFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>(); var statusFeature = HttpContext.Features.Get<IStatusCodeReExecuteFeature>();
if (statusFeature != null) 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<IExceptionHandlerPathFeature>(); var exceptionHandlerPathFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();

34
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<AbpUnitOfWorkMiddleware> _logger;
public GlobalExceptionHandlerMiddleware(RequestDelegate next, ILogger<AbpUnitOfWorkMiddleware> 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("/");
}
}
}
}
Loading…
Cancel
Save