From 9efefd96fe9a5c89222914fff5bafcc57f8c8108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20G=C3=B3reczny?= Date: Thu, 10 Dec 2020 15:28:00 +0100 Subject: [PATCH] SES-91 Added error middleware --- .../ApiErrors/ErrorDetails.cs | 26 +++++++++++ .../SessionCompanion.Extensions.csproj | 4 ++ SessionCompanion/SessionCompanion.sln | 13 +++--- .../Configurations/ExceptionMiddleware.cs | 43 +++++++++++++++++++ .../ExceptionMiddlewareExtensions.cs | 19 ++++++++ .../SessionCompanion/SessionCompanion.csproj | 2 +- SessionCompanion/SessionCompanion/Startup.cs | 4 ++ 7 files changed, 102 insertions(+), 9 deletions(-) create mode 100644 SessionCompanion/SessionCompanion.Extensions/ApiErrors/ErrorDetails.cs create mode 100644 SessionCompanion/SessionCompanion/Configurations/ExceptionMiddleware.cs create mode 100644 SessionCompanion/SessionCompanion/Configurations/ExceptionMiddlewareExtensions.cs diff --git a/SessionCompanion/SessionCompanion.Extensions/ApiErrors/ErrorDetails.cs b/SessionCompanion/SessionCompanion.Extensions/ApiErrors/ErrorDetails.cs new file mode 100644 index 0000000..e6ad261 --- /dev/null +++ b/SessionCompanion/SessionCompanion.Extensions/ApiErrors/ErrorDetails.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.Json; +using System.Threading.Tasks; + +namespace SessionCompanion.Extensions.ApiErrors +{ + public class ErrorDetails + { + /// + /// Kod błędu + /// + public int StatusCode { get; set; } + + /// + /// Wiadomość błędu do pokazania + /// + public string Message { get; set; } + + public override string ToString() + { + return JsonSerializer.Serialize(this); + } + } +} diff --git a/SessionCompanion/SessionCompanion.Extensions/SessionCompanion.Extensions.csproj b/SessionCompanion/SessionCompanion.Extensions/SessionCompanion.Extensions.csproj index f208d30..6015009 100644 --- a/SessionCompanion/SessionCompanion.Extensions/SessionCompanion.Extensions.csproj +++ b/SessionCompanion/SessionCompanion.Extensions/SessionCompanion.Extensions.csproj @@ -4,4 +4,8 @@ net5.0 + + + + diff --git a/SessionCompanion/SessionCompanion.sln b/SessionCompanion/SessionCompanion.sln index c12041e..edd8402 100644 --- a/SessionCompanion/SessionCompanion.sln +++ b/SessionCompanion/SessionCompanion.sln @@ -4,9 +4,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 VisualStudioVersion = 16.0.30717.126 MinimumVisualStudioVersion = 10.0.40219.1 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionCompanion", "SessionCompanion\SessionCompanion.csproj", "{C646135F-16CE-4B16-B041-252D343D4E01}" - ProjectSection(ProjectDependencies) = postProject - {0CBA48BB-7C1F-42FB-9008-C75A7681ED09} = {0CBA48BB-7C1F-42FB-9008-C75A7681ED09} - EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionCompanion.Database", "SessionCompanion.Database\SessionCompanion.Database.csproj", "{CA05189B-A4AB-4946-80DC-EFA075A10F09}" EndProject @@ -14,7 +11,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionCompanion.ViewModels EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SessionCompanion.Services", "SessionCompanion.Services\SessionCompanion.Services.csproj", "{C0A172ED-0F4C-4E78-8B64-28E2A756F62F}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SessionCompanion.ApiExtensions", "SessionCompanion.ApiReturn\SessionCompanion.ApiExtensions.csproj", "{0CBA48BB-7C1F-42FB-9008-C75A7681ED09}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SessionCompanion.Extensions", "SessionCompanion.Extensions\SessionCompanion.Extensions.csproj", "{1EE35EB3-C703-407C-B390-5605A0A46884}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -38,10 +35,10 @@ Global {C0A172ED-0F4C-4E78-8B64-28E2A756F62F}.Debug|Any CPU.Build.0 = Debug|Any CPU {C0A172ED-0F4C-4E78-8B64-28E2A756F62F}.Release|Any CPU.ActiveCfg = Release|Any CPU {C0A172ED-0F4C-4E78-8B64-28E2A756F62F}.Release|Any CPU.Build.0 = Release|Any CPU - {0CBA48BB-7C1F-42FB-9008-C75A7681ED09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0CBA48BB-7C1F-42FB-9008-C75A7681ED09}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CBA48BB-7C1F-42FB-9008-C75A7681ED09}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0CBA48BB-7C1F-42FB-9008-C75A7681ED09}.Release|Any CPU.Build.0 = Release|Any CPU + {1EE35EB3-C703-407C-B390-5605A0A46884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1EE35EB3-C703-407C-B390-5605A0A46884}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1EE35EB3-C703-407C-B390-5605A0A46884}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1EE35EB3-C703-407C-B390-5605A0A46884}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/SessionCompanion/SessionCompanion/Configurations/ExceptionMiddleware.cs b/SessionCompanion/SessionCompanion/Configurations/ExceptionMiddleware.cs new file mode 100644 index 0000000..a9ba919 --- /dev/null +++ b/SessionCompanion/SessionCompanion/Configurations/ExceptionMiddleware.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace SessionCompanion.Configurations +{ + using System.Net; + + using Microsoft.AspNetCore.Http; + + using SessionCompanion.Extensions.ApiErrors; + + public class ExceptionMiddleware + { + private readonly RequestDelegate _next; + public ExceptionMiddleware(RequestDelegate next) + { + _next = next; + } + public async Task InvokeAsync(HttpContext httpContext) + { + try + { + await _next(httpContext); + } + catch (Exception ex) + { + await HandleExceptionAsync(httpContext, ex); + } + } + private Task HandleExceptionAsync(HttpContext context, Exception exception) + { + context.Response.ContentType = "application/json"; + context.Response.StatusCode = (int)HttpStatusCode.InternalServerError; + return context.Response.WriteAsync(new ErrorDetails() + { + StatusCode = context.Response.StatusCode, + Message = exception.Message + }.ToString()); + } + } +} diff --git a/SessionCompanion/SessionCompanion/Configurations/ExceptionMiddlewareExtensions.cs b/SessionCompanion/SessionCompanion/Configurations/ExceptionMiddlewareExtensions.cs new file mode 100644 index 0000000..6c3aee6 --- /dev/null +++ b/SessionCompanion/SessionCompanion/Configurations/ExceptionMiddlewareExtensions.cs @@ -0,0 +1,19 @@ +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore; +using Microsoft.AspNetCore.Http; +using System.Net; + +namespace SessionCompanion.Extensions.ApiErrors +{ + using Microsoft.AspNetCore.Diagnostics; + + using SessionCompanion.Configurations; + + public static class ExceptionMiddlewareExtensions + { + public static void ConfigureCustomExceptionMiddleware(this IApplicationBuilder app) + { + app.UseMiddleware(); + } + } +} diff --git a/SessionCompanion/SessionCompanion/SessionCompanion.csproj b/SessionCompanion/SessionCompanion/SessionCompanion.csproj index d020f60..c455a8f 100644 --- a/SessionCompanion/SessionCompanion/SessionCompanion.csproj +++ b/SessionCompanion/SessionCompanion/SessionCompanion.csproj @@ -41,8 +41,8 @@ - + diff --git a/SessionCompanion/SessionCompanion/Startup.cs b/SessionCompanion/SessionCompanion/Startup.cs index 5318f64..6e96eed 100644 --- a/SessionCompanion/SessionCompanion/Startup.cs +++ b/SessionCompanion/SessionCompanion/Startup.cs @@ -21,6 +21,8 @@ namespace SessionCompanion using Microsoft.OpenApi.Models; + using SessionCompanion.Extensions.ApiErrors; + public class Startup { @@ -83,6 +85,8 @@ namespace SessionCompanion app.UseHsts(); } + app.ConfigureCustomExceptionMiddleware(); + app.UseHttpsRedirection(); app.UseStaticFiles(); if (!env.IsDevelopment())