diff --git a/src/SwaggerDiff.AspNetCore/Extensions/SwaggerDiffExtensions.cs b/src/SwaggerDiff.AspNetCore/Extensions/SwaggerDiffExtensions.cs index 1eab00f..c70b41f 100644 --- a/src/SwaggerDiff.AspNetCore/Extensions/SwaggerDiffExtensions.cs +++ b/src/SwaggerDiff.AspNetCore/Extensions/SwaggerDiffExtensions.cs @@ -74,8 +74,22 @@ public static WebApplication UseSwaggerDiff(this WebApplication app) await using var stream = Assembly.GetManifestResourceStream(SwaggerDiffIndexResource); if (stream != null) { + // Inside a Map() branch, PathBase includes the RoutePrefix. + // Strip it to recover the application's actual PathBase so the + // frontend can prefix API calls correctly. + var branchPathBase = context.Request.PathBase.Value?.TrimEnd('/') ?? ""; + var normalizedPrefix = options.RoutePrefix.TrimEnd('/'); + var pathBase = branchPathBase.EndsWith(normalizedPrefix, StringComparison.OrdinalIgnoreCase) + ? branchPathBase[..^normalizedPrefix.Length] + : branchPathBase; + pathBase = pathBase.TrimEnd('/'); + + using var reader = new StreamReader(stream); + var html = (await reader.ReadToEndAsync()) + .Replace("{{PATH_BASE}}", pathBase); + context.Response.ContentType = "text/html"; - await stream.CopyToAsync(context.Response.Body); + await context.Response.WriteAsync(html); return; } } diff --git a/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff-tool.html b/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff-tool.html index afba531..150fbfd 100644 --- a/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff-tool.html +++ b/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff-tool.html @@ -26,8 +26,13 @@ const target = document.querySelector('.topbar .download-url-wrapper'); if (target && !document.getElementById('swagger-diff-btn')) { + // Derive PathBase from the current URL. + // SwaggerUI lives at {pathBase}/swagger, so strip the swagger + // segment to get the application's PathBase prefix. + const swaggerBase = window.location.pathname.replace(/\/swagger\b.*$/, ''); + const btn = document.createElement('a'); - btn.href = '/swagger-diff'; + btn.href = swaggerBase + '/swagger-diff'; btn.innerHTML = `Swagger Diff Tool`; btn.className = 'swagger-diff-btn'; btn.id = 'swagger-diff-btn'; diff --git a/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff/index.html b/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff/index.html index 3ee4b0b..2647df6 100644 --- a/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff/index.html +++ b/src/SwaggerDiff.AspNetCore/wwwroot/swagger-diff/index.html @@ -199,7 +199,7 @@