diff --git a/Oqtane.Server/Extensions/ApplicationBuilderExtensions.cs b/Oqtane.Server/Extensions/ApplicationBuilderExtensions.cs index 839fe57d..3e466a20 100644 --- a/Oqtane.Server/Extensions/ApplicationBuilderExtensions.cs +++ b/Oqtane.Server/Extensions/ApplicationBuilderExtensions.cs @@ -44,5 +44,9 @@ namespace Oqtane.Extensions public static IApplicationBuilder UseJwtAuthorization(this IApplicationBuilder builder) => builder.UseMiddleware(); + + public static IApplicationBuilder UseExceptionMiddleWare(this IApplicationBuilder builder) + => builder.UseMiddleware(); + } } diff --git a/Oqtane.Server/Infrastructure/Middleware/ExceptionMiddleware.cs b/Oqtane.Server/Infrastructure/Middleware/ExceptionMiddleware.cs new file mode 100644 index 00000000..d8ef15c1 --- /dev/null +++ b/Oqtane.Server/Infrastructure/Middleware/ExceptionMiddleware.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Oqtane.Enums; +using Oqtane.Models; +using Oqtane.Shared; + +namespace Oqtane.Infrastructure +{ + internal class ExceptionMiddleware + { + private readonly RequestDelegate _next; + + public ExceptionMiddleware(RequestDelegate next) + { + _next = next; + } + + public async Task Invoke(HttpContext context, IServiceProvider provider) + { + try + { + await _next(context); + } + catch (Exception exception) + { + var _logger = provider.GetRequiredService(); + var endPoint = context.GetEndpoint()?.DisplayName; + var contextAlias = context.Items.FirstOrDefault(i => i.Key.ToString() == "Alias"); + Alias alias; + int siteId = -1; + var defaultVal = default(KeyValuePair); + if (!contextAlias.Equals(defaultVal)) + { + alias = contextAlias.Value as Alias; + siteId = alias.SiteId; + } + _logger.Log(siteId, LogLevel.Error, endPoint, LogFunction.Other, exception, exception.Message, context.User?.Identity.Name); + } + } + } +} diff --git a/Oqtane.Server/Startup.cs b/Oqtane.Server/Startup.cs index 0f3583ea..8180ea9b 100644 --- a/Oqtane.Server/Startup.cs +++ b/Oqtane.Server/Startup.cs @@ -199,6 +199,7 @@ namespace Oqtane app.UseHttpsRedirection(); app.UseStaticFiles(); + app.UseExceptionMiddleWare(); app.UseTenantResolution(); app.UseJwtAuthorization(); app.UseRouting();