From 68fc8fabab0c13e1b4d6cfc800939c16cf050554 Mon Sep 17 00:00:00 2001 From: Sebastian Stehle Date: Tue, 24 Mar 2026 22:32:32 +0100 Subject: [PATCH] Fix path base. --- .../PathBaseMiddlewareExtensions.cs | 47 +++++++++++++++++++ backend/src/Squidex.Web/Resources.cs | 1 - backend/src/Squidex/Startup.cs | 2 +- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 backend/src/Squidex.Web/PathBaseMiddlewareExtensions.cs diff --git a/backend/src/Squidex.Web/PathBaseMiddlewareExtensions.cs b/backend/src/Squidex.Web/PathBaseMiddlewareExtensions.cs new file mode 100644 index 000000000..00fd99dc4 --- /dev/null +++ b/backend/src/Squidex.Web/PathBaseMiddlewareExtensions.cs @@ -0,0 +1,47 @@ +// ========================================================================== +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex UG (haftungsbeschraenkt) +// All rights reserved. Licensed under the MIT license. +// ========================================================================== + +using Microsoft.AspNetCore.Builder; +using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.DependencyInjection; +using Squidex.Hosting; + +namespace Squidex.Web; + +public static class PathBaseMiddlewareExtensions +{ + public static IApplicationBuilder UseFallbackPathBase(this IApplicationBuilder app) + { + var urlGenerator = app.ApplicationServices.GetRequiredService(); + + var configuredBase = urlGenerator.BuildBasePath(); + if (string.IsNullOrWhiteSpace(configuredBase)) + { + return app; + } + + var pathBase = new PathString(configuredBase); + + return app.Use(async (context, next) => + { + if (context.Request.PathBase.HasValue) + { + await next(); + return; + } + + context.Request.PathBase = pathBase; + + if (context.Request.Path.StartsWithSegments(pathBase, StringComparison.Ordinal, out var remainder)) + { + context.Request.Path = remainder; + } + + await next(); + }); + } +} diff --git a/backend/src/Squidex.Web/Resources.cs b/backend/src/Squidex.Web/Resources.cs index 69030ab51..76f50e228 100644 --- a/backend/src/Squidex.Web/Resources.cs +++ b/backend/src/Squidex.Web/Resources.cs @@ -170,7 +170,6 @@ public sealed class Resources(ApiController controller) var url = Controller.Url(action, values); var basePath = Controller.HttpContext.Request.PathBase; - if (url.StartsWith(Controller.HttpContext.Request.PathBase, StringComparison.OrdinalIgnoreCase)) { url = url[basePath.Value!.Length..]; diff --git a/backend/src/Squidex/Startup.cs b/backend/src/Squidex/Startup.cs index d41aacc67..d19ebd7bb 100644 --- a/backend/src/Squidex/Startup.cs +++ b/backend/src/Squidex/Startup.cs @@ -73,7 +73,7 @@ public sealed class Startup(IConfiguration config) { app.UseWebSockets(); app.UseCookiePolicy(); - app.UseDefaultPathBase(); + app.UseFallbackPathBase(); app.UseDefaultForwardRules(); app.UseSquidexLogging(); app.UseSquidexLocalization();