diff --git a/services/Archival/FilterLists.Archival.Api/Controllers/ErrorController.cs b/services/Archival/FilterLists.Archival.Api/Controllers/ErrorController.cs new file mode 100644 index 000000000..a4d53ae97 --- /dev/null +++ b/services/Archival/FilterLists.Archival.Api/Controllers/ErrorController.cs @@ -0,0 +1,31 @@ +using System; +using Microsoft.AspNetCore.Diagnostics; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; + +namespace FilterLists.Archival.Api.Controllers +{ + [ApiController] + [ApiExplorerSettings(IgnoreApi = true)] + // TODO: de-duplicate into SharedKernel + public class ErrorController : ControllerBase + { + [Route("/error-local-development")] + public IActionResult ErrorLocalDevelopment([FromServices] IWebHostEnvironment webHostEnvironment) + { + if (webHostEnvironment.EnvironmentName != "Development") + { + throw new InvalidOperationException("This shouldn't be invoked in non-development environments."); + } + + var context = HttpContext.Features.Get(); + return Problem(context.Error.StackTrace, title: context.Error.Message); + } + + [Route("/error")] + public IActionResult Error() + { + return Problem(); + } + } +} diff --git a/services/Archival/FilterLists.Archival.Api/Startup.cs b/services/Archival/FilterLists.Archival.Api/Startup.cs index 5d1368f80..b966a4ac5 100644 --- a/services/Archival/FilterLists.Archival.Api/Startup.cs +++ b/services/Archival/FilterLists.Archival.Api/Startup.cs @@ -19,8 +19,7 @@ public Startup(IConfiguration configuration) public void ConfigureServices(IServiceCollection services) { services.AddRouting(o => o.LowercaseUrls = true); - services.AddControllers() - .AddJsonOptions(o => o.JsonSerializerOptions.IgnoreNullValues = true); + services.AddControllers().AddJsonOptions(o => o.JsonSerializerOptions.IgnoreNullValues = true); services.AddSwaggerGen(); services.AddApplicationServices(Configuration); } @@ -28,11 +27,7 @@ public void ConfigureServices(IServiceCollection services) public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseApplication(); - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - + app.UseExceptionHandler(env.IsDevelopment() ? "/error-local-development" : "/error"); app.UseRouting(); app.UseEndpoints(e => e.MapControllers()); app.UseSwagger(); diff --git a/services/Directory/FilterLists.Directory.Api/Controllers/ErrorController.cs b/services/Directory/FilterLists.Directory.Api/Controllers/ErrorController.cs new file mode 100644 index 000000000..c3ff4cce6 --- /dev/null +++ b/services/Directory/FilterLists.Directory.Api/Controllers/ErrorController.cs @@ -0,0 +1,31 @@ +using System; +using Microsoft.AspNetCore.Diagnostics; +using Microsoft.AspNetCore.Hosting; +using Microsoft.AspNetCore.Mvc; + +namespace FilterLists.Directory.Api.Controllers +{ + [ApiController] + [ApiExplorerSettings(IgnoreApi = true)] + // TODO: de-duplicate into SharedKernel + public class ErrorController : ControllerBase + { + [Route("/error-local-development")] + public IActionResult ErrorLocalDevelopment([FromServices] IWebHostEnvironment webHostEnvironment) + { + if (webHostEnvironment.EnvironmentName != "Development") + { + throw new InvalidOperationException("This shouldn't be invoked in non-development environments."); + } + + var context = HttpContext.Features.Get(); + return Problem(context.Error.StackTrace, title: context.Error.Message); + } + + [Route("/error")] + public IActionResult Error() + { + return Problem(); + } + } +} diff --git a/services/Directory/FilterLists.Directory.Api/Startup.cs b/services/Directory/FilterLists.Directory.Api/Startup.cs index 741f561cc..95a7c3c50 100644 --- a/services/Directory/FilterLists.Directory.Api/Startup.cs +++ b/services/Directory/FilterLists.Directory.Api/Startup.cs @@ -20,8 +20,7 @@ public void ConfigureServices(IServiceCollection services) { services.AddMemoryCache(); services.AddRouting(o => o.LowercaseUrls = true); - services.AddControllers() - .AddJsonOptions(o => o.JsonSerializerOptions.IgnoreNullValues = true); + services.AddControllers().AddJsonOptions(o => o.JsonSerializerOptions.IgnoreNullValues = true); services.AddSwaggerGen(); services.AddApplicationServices(Configuration); } @@ -29,11 +28,7 @@ public void ConfigureServices(IServiceCollection services) public static void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseApplication(); - if (env.IsDevelopment()) - { - app.UseDeveloperExceptionPage(); - } - + app.UseExceptionHandler(env.IsDevelopment() ? "/error-local-development" : "/error"); app.UseRouting(); app.UseEndpoints(e => e.MapControllers()); app.UseSwagger();