From 86d9e51039a2ccb4ab76311e151792853a984cfd Mon Sep 17 00:00:00 2001 From: Justin Neville <67802060+justin-nevitech@users.noreply.github.com> Date: Wed, 26 Oct 2022 12:56:09 +0100 Subject: [PATCH] Fix for UseExceptionHandler no longer working since v10.3 RC (#13218) * Fix for UseExceptionHandler no longer working since v10.3 RC * Update the management api path to match the new one Co-authored-by: Nikolaj --- .../ManagementApiComposer.cs | 43 ++++++++++++------- 1 file changed, 28 insertions(+), 15 deletions(-) diff --git a/src/Umbraco.Cms.ManagementApi/ManagementApiComposer.cs b/src/Umbraco.Cms.ManagementApi/ManagementApiComposer.cs index b73bc40ed2..071b6de63a 100644 --- a/src/Umbraco.Cms.ManagementApi/ManagementApiComposer.cs +++ b/src/Umbraco.Cms.ManagementApi/ManagementApiComposer.cs @@ -84,24 +84,37 @@ public class ManagementApiComposer : IComposer "BackofficeSwagger", applicationBuilder => { - applicationBuilder.UseExceptionHandler(exceptionBuilder => exceptionBuilder.Run(async context => - { - Exception? exception = context.Features.Get()?.Error; - if (exception is null) + // Only use the API exception handler when we are requesting an API + applicationBuilder.UseWhen( + httpContext => { - return; - } + GlobalSettings? settings = httpContext.RequestServices.GetRequiredService>().Value; + IHostingEnvironment hostingEnvironment = httpContext.RequestServices.GetRequiredService(); + var officePath = settings.GetBackOfficePath(hostingEnvironment); - var response = new ProblemDetails + return httpContext.Request.Path.Value?.StartsWith($"{officePath}/management/api/") ?? false; + }, + innerBuilder => { - Title = exception.Message, - Detail = exception.StackTrace, - Status = StatusCodes.Status500InternalServerError, - Instance = exception.GetType().Name, - Type = "Error", - }; - await context.Response.WriteAsJsonAsync(response); - })); + innerBuilder.UseExceptionHandler(exceptionBuilder => exceptionBuilder.Run(async context => + { + Exception? exception = context.Features.Get()?.Error; + if (exception is null) + { + return; + } + + var response = new ProblemDetails + { + Title = exception.Message, + Detail = exception.StackTrace, + Status = StatusCodes.Status500InternalServerError, + Instance = exception.GetType().Name, + Type = "Error", + }; + await context.Response.WriteAsJsonAsync(response); + })); + }); }, applicationBuilder => {