From a381a6923ccb60c155db8dd4e97d76cbda8860d0 Mon Sep 17 00:00:00 2001 From: David Fowler Date: Thu, 4 May 2023 15:40:31 -0700 Subject: [PATCH] Removed filters and special errors handling from MVC --- .../Basket/Basket.API/GlobalUsings.cs | 6 --- .../InternalServerErrorObjectResult.cs | 11 ----- .../Exceptions/BasketDomainException.cs | 16 ------- .../Filters/HttpGlobalExceptionFilter.cs | 47 ------------------- .../Filters/JsonErrorResponse.cs | 9 ---- .../Filters/ValidateModelStateFilter.cs | 26 ---------- src/Services/Basket/Basket.API/Program.cs | 17 ++----- 7 files changed, 4 insertions(+), 128 deletions(-) delete mode 100644 src/Services/Basket/Basket.API/Infrastructure/ActionResults/InternalServerErrorObjectResult.cs delete mode 100644 src/Services/Basket/Basket.API/Infrastructure/Exceptions/BasketDomainException.cs delete mode 100644 src/Services/Basket/Basket.API/Infrastructure/Filters/HttpGlobalExceptionFilter.cs delete mode 100644 src/Services/Basket/Basket.API/Infrastructure/Filters/JsonErrorResponse.cs delete mode 100644 src/Services/Basket/Basket.API/Infrastructure/Filters/ValidateModelStateFilter.cs diff --git a/src/Services/Basket/Basket.API/GlobalUsings.cs b/src/Services/Basket/Basket.API/GlobalUsings.cs index c0c12186a..708cf1207 100644 --- a/src/Services/Basket/Basket.API/GlobalUsings.cs +++ b/src/Services/Basket/Basket.API/GlobalUsings.cs @@ -6,9 +6,6 @@ global using System.Net; global using System.Security.Claims; global using System.Text.Json; global using System.Threading.Tasks; -global using Basket.API.Infrastructure.ActionResults; -global using Basket.API.Infrastructure.Exceptions; -global using Basket.API.Infrastructure.Filters; global using Basket.API.IntegrationEvents.EventHandling; global using Basket.API.IntegrationEvents.Events; global using Basket.API.Model; @@ -16,10 +13,8 @@ global using Grpc.Core; global using GrpcBasket; global using Microsoft.AspNetCore.Authorization; global using Microsoft.AspNetCore.Builder; -global using Microsoft.AspNetCore.Hosting; global using Microsoft.AspNetCore.Http; global using Microsoft.AspNetCore.Mvc; -global using Microsoft.AspNetCore.Mvc.Filters; global using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Abstractions; global using Microsoft.eShopOnContainers.BuildingBlocks.EventBus.Events; global using Microsoft.eShopOnContainers.Services.Basket.API; @@ -30,7 +25,6 @@ global using Microsoft.eShopOnContainers.Services.Basket.API.Model; global using Microsoft.eShopOnContainers.Services.Basket.API.Services; global using Microsoft.Extensions.Configuration; global using Microsoft.Extensions.DependencyInjection; -global using Microsoft.Extensions.Hosting; global using Microsoft.Extensions.Logging; global using Services.Common; global using StackExchange.Redis; diff --git a/src/Services/Basket/Basket.API/Infrastructure/ActionResults/InternalServerErrorObjectResult.cs b/src/Services/Basket/Basket.API/Infrastructure/ActionResults/InternalServerErrorObjectResult.cs deleted file mode 100644 index 5f95e586e..000000000 --- a/src/Services/Basket/Basket.API/Infrastructure/ActionResults/InternalServerErrorObjectResult.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Basket.API.Infrastructure.ActionResults; - -public class InternalServerErrorObjectResult : ObjectResult -{ - public InternalServerErrorObjectResult(object error) - : base(error) - { - StatusCode = StatusCodes.Status500InternalServerError; - } -} - diff --git a/src/Services/Basket/Basket.API/Infrastructure/Exceptions/BasketDomainException.cs b/src/Services/Basket/Basket.API/Infrastructure/Exceptions/BasketDomainException.cs deleted file mode 100644 index 0502b7924..000000000 --- a/src/Services/Basket/Basket.API/Infrastructure/Exceptions/BasketDomainException.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace Basket.API.Infrastructure.Exceptions; - -public class BasketDomainException : Exception -{ - public BasketDomainException() - { } - - public BasketDomainException(string message) - : base(message) - { } - - public BasketDomainException(string message, Exception innerException) - : base(message, innerException) - { } -} - diff --git a/src/Services/Basket/Basket.API/Infrastructure/Filters/HttpGlobalExceptionFilter.cs b/src/Services/Basket/Basket.API/Infrastructure/Filters/HttpGlobalExceptionFilter.cs deleted file mode 100644 index 00b0b5195..000000000 --- a/src/Services/Basket/Basket.API/Infrastructure/Filters/HttpGlobalExceptionFilter.cs +++ /dev/null @@ -1,47 +0,0 @@ -namespace Basket.API.Infrastructure.Filters; - -public partial class HttpGlobalExceptionFilter : IExceptionFilter -{ - private readonly IWebHostEnvironment env; - private readonly ILogger logger; - - public HttpGlobalExceptionFilter(IWebHostEnvironment env, ILogger logger) - { - this.env = env; - this.logger = logger; - } - - public void OnException(ExceptionContext context) - { - logger.LogError(new EventId(context.Exception.HResult), - context.Exception, - context.Exception.Message); - - if (context.Exception.GetType() == typeof(BasketDomainException)) - { - var json = new JsonErrorResponse - { - Messages = new[] { context.Exception.Message } - }; - - context.Result = new BadRequestObjectResult(json); - context.HttpContext.Response.StatusCode = (int)HttpStatusCode.BadRequest; - } - else - { - var json = new JsonErrorResponse - { - Messages = new[] { "An error occurred. Try it again." } - }; - - if (env.IsDevelopment()) - { - json.DeveloperMessage = context.Exception; - } - - context.Result = new InternalServerErrorObjectResult(json); - context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError; - } - context.ExceptionHandled = true; - } -} diff --git a/src/Services/Basket/Basket.API/Infrastructure/Filters/JsonErrorResponse.cs b/src/Services/Basket/Basket.API/Infrastructure/Filters/JsonErrorResponse.cs deleted file mode 100644 index 88bc02eda..000000000 --- a/src/Services/Basket/Basket.API/Infrastructure/Filters/JsonErrorResponse.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Basket.API.Infrastructure.Filters; - -public class JsonErrorResponse -{ - public string[] Messages { get; set; } - - public object DeveloperMessage { get; set; } -} - diff --git a/src/Services/Basket/Basket.API/Infrastructure/Filters/ValidateModelStateFilter.cs b/src/Services/Basket/Basket.API/Infrastructure/Filters/ValidateModelStateFilter.cs deleted file mode 100644 index 5c97b85dc..000000000 --- a/src/Services/Basket/Basket.API/Infrastructure/Filters/ValidateModelStateFilter.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace Basket.API.Infrastructure.Filters; - -public class ValidateModelStateFilter : ActionFilterAttribute -{ - public override void OnActionExecuting(ActionExecutingContext context) - { - if (context.ModelState.IsValid) - { - return; - } - - var validationErrors = context.ModelState - .Keys - .SelectMany(k => context.ModelState[k].Errors) - .Select(e => e.ErrorMessage) - .ToArray(); - - var json = new JsonErrorResponse - { - Messages = validationErrors - }; - - context.Result = new BadRequestObjectResult(json); - } -} - diff --git a/src/Services/Basket/Basket.API/Program.cs b/src/Services/Basket/Basket.API/Program.cs index effabdd01..96773a768 100644 --- a/src/Services/Basket/Basket.API/Program.cs +++ b/src/Services/Basket/Basket.API/Program.cs @@ -1,19 +1,10 @@ -using Microsoft.Extensions.Diagnostics.HealthChecks; - -var builder = WebApplication.CreateBuilder(args); +var builder = WebApplication.CreateBuilder(args); builder.AddServiceDefaults(); -builder.Services.AddGrpc(options => -{ - options.EnableDetailedErrors = true; -}); - -builder.Services.AddControllers(options => -{ - options.Filters.Add(typeof(HttpGlobalExceptionFilter)); - options.Filters.Add(typeof(ValidateModelStateFilter)); -}); +builder.Services.AddGrpc(); +builder.Services.AddControllers(); +builder.Services.AddProblemDetails(); builder.Services.AddRedis(builder.Configuration);