From e672f151e1a1104a849bb24d9be94bf30dac63c9 Mon Sep 17 00:00:00 2001 From: casey Date: Tue, 5 Mar 2024 10:25:17 -0800 Subject: [PATCH] Update notExists to true when value is empty (#2412) * Update notExists to true when value is empty * Simplify the condition further --------- Co-authored-by: Casey Sun Co-authored-by: Miha Zupan --- src/ReverseProxy/Routing/HeaderMatcherPolicy.cs | 4 ++-- test/ReverseProxy.Tests/Routing/HeaderMatcherPolicyTests.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs b/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs index 8248aa2a3..fe98fe37b 100644 --- a/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs +++ b/src/ReverseProxy/Routing/HeaderMatcherPolicy.cs @@ -70,13 +70,13 @@ public Task ApplyAsync(HttpContext httpContext, CandidateSet candidates) foreach (var matcher in matchers) { - var headerExists = headers.TryGetValue(matcher.Name, out var requestHeaderValues); + headers.TryGetValue(matcher.Name, out var requestHeaderValues); var valueIsEmpty = StringValues.IsNullOrEmpty(requestHeaderValues); var matched = matcher.Mode switch { HeaderMatchMode.Exists => !valueIsEmpty, - HeaderMatchMode.NotExists => !headerExists, + HeaderMatchMode.NotExists => valueIsEmpty, HeaderMatchMode.ExactHeader => !valueIsEmpty && TryMatchExactOrPrefix(matcher, requestHeaderValues), HeaderMatchMode.HeaderPrefix => !valueIsEmpty && TryMatchExactOrPrefix(matcher, requestHeaderValues), HeaderMatchMode.Contains => !valueIsEmpty && TryMatchContainsOrNotContains(matcher, requestHeaderValues), diff --git a/test/ReverseProxy.Tests/Routing/HeaderMatcherPolicyTests.cs b/test/ReverseProxy.Tests/Routing/HeaderMatcherPolicyTests.cs index b6a110e0b..9f293448a 100644 --- a/test/ReverseProxy.Tests/Routing/HeaderMatcherPolicyTests.cs +++ b/test/ReverseProxy.Tests/Routing/HeaderMatcherPolicyTests.cs @@ -154,7 +154,7 @@ public void AppliesToEndpoints_NoMetadata_DoesNotApply() [InlineData("", HeaderMatchMode.Exists, false)] [InlineData("abc", HeaderMatchMode.Exists, true)] [InlineData(null, HeaderMatchMode.NotExists, true)] - [InlineData("", HeaderMatchMode.NotExists, false)] + [InlineData("", HeaderMatchMode.NotExists, true)] [InlineData("abc", HeaderMatchMode.NotExists, false)] public async Task ApplyAsync_MatchingScenarios_AnyHeaderValue(string incomingHeaderValue, HeaderMatchMode mode, bool shouldMatch) {