From 3eb20b667de9e68a1787d12d5c776a2d9c148a98 Mon Sep 17 00:00:00 2001 From: viogustian Date: Sat, 13 Jun 2026 00:20:55 +0700 Subject: [PATCH] fix: improve ignore path matching to prevent false positives (#116) --- .../Middleware/MiddlewareExecutionFlowTests.cs | 11 +++++++++++ .../Middleware/DebugProbeMiddleware.cs | 4 +++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/DebugProbe.AspNetCore.Tests/Middleware/MiddlewareExecutionFlowTests.cs b/DebugProbe.AspNetCore.Tests/Middleware/MiddlewareExecutionFlowTests.cs index 9a72539..730f86a 100644 --- a/DebugProbe.AspNetCore.Tests/Middleware/MiddlewareExecutionFlowTests.cs +++ b/DebugProbe.AspNetCore.Tests/Middleware/MiddlewareExecutionFlowTests.cs @@ -41,6 +41,17 @@ public async Task Ignored_paths_are_skipped() Assert.Equal(HttpStatusCode.OK, response.StatusCode); Assert.Empty(app.Store.GetAll()); } + [Fact] + public async Task Similar_paths_are_not_skipped() + { + await using var app = await DebugProbeTestApp.CreateAsync( + endpoints => endpoints.MapGet("/healthcare", () => Results.Ok()), + options => options.IgnorePaths = ["/health"]); + + var response = await app.Client.GetAsync("/healthcare"); + Assert.Equal(HttpStatusCode.OK, response.StatusCode); + Assert.Single(app.Store.GetAll()); + } [Theory] [InlineData("/health")] diff --git a/DebugProbe.AspNetCore/Middleware/DebugProbeMiddleware.cs b/DebugProbe.AspNetCore/Middleware/DebugProbeMiddleware.cs index e262aed..c4c80d4 100644 --- a/DebugProbe.AspNetCore/Middleware/DebugProbeMiddleware.cs +++ b/DebugProbe.AspNetCore/Middleware/DebugProbeMiddleware.cs @@ -162,7 +162,9 @@ private bool IsIgnoredPath(PathString requestPath) return DefaultIgnorePaths .Concat(_options.IgnorePaths) .Distinct(StringComparer.OrdinalIgnoreCase) - .Any(ignorePath => path.StartsWith(ignorePath, StringComparison.OrdinalIgnoreCase)); + .Any(ignorePath => + path.Equals(ignorePath, StringComparison.OrdinalIgnoreCase) || + path.StartsWith(ignorePath.TrimEnd('/') + "/", StringComparison.OrdinalIgnoreCase)); } private static async Task CaptureRequestBodyAsync(HttpContext context, int maxBodySize)