diff --git a/src/Nancy.Tests/Unit/Routing/DefaultRoutePatternMatcherFixture.cs b/src/Nancy.Tests/Unit/Routing/DefaultRoutePatternMatcherFixture.cs index 905a215ef7..3a586bedc1 100644 --- a/src/Nancy.Tests/Unit/Routing/DefaultRoutePatternMatcherFixture.cs +++ b/src/Nancy.Tests/Unit/Routing/DefaultRoutePatternMatcherFixture.cs @@ -118,14 +118,13 @@ public void Should_allow_regex_in_route_definition_and_return_negative_result_wh } [Fact] - public void Should_properly_handle_uri_escaped_route_parameters_that_were_matched() + public void Should_not_url_decode_captured_parameters() { // Given - const string parameter = "baa ram ewe{}"; - var escapedParameter = Uri.EscapeUriString(parameter); + var parameter = Uri.EscapeUriString("baa ram ewe{}"); // When - var results = this.matcher.Match("/foo/" + escapedParameter, "/foo/{bar}"); + var results = this.matcher.Match("/foo/" + parameter, "/foo/{bar}"); //Then ((string)results.Parameters["bar"]).ShouldEqual(parameter); diff --git a/src/Nancy/Routing/DefaultRoutePatternMatcher.cs b/src/Nancy/Routing/DefaultRoutePatternMatcher.cs index 3a9603116d..7edfdfb351 100644 --- a/src/Nancy/Routing/DefaultRoutePatternMatcher.cs +++ b/src/Nancy/Routing/DefaultRoutePatternMatcher.cs @@ -6,7 +6,6 @@ using System.Globalization; using System.Text.RegularExpressions; using Nancy.Extensions; - using Nancy.Helpers; /// /// Default implementation of a route pattern matcher. @@ -17,10 +16,14 @@ public class DefaultRoutePatternMatcher : IRoutePatternMatcher public IRoutePatternMatchResult Match(string requestedPath, string routePath) { - var routePathPattern = this.matcherCache.GetOrAdd(routePath, (s) => BuildRegexMatcher(routePath)); + var routePathPattern = + this.matcherCache.GetOrAdd(routePath, s => BuildRegexMatcher(routePath)); - requestedPath = TrimTrailingSlashFromRequestedPath(requestedPath); - var match = routePathPattern.Match(HttpUtility.UrlDecode(requestedPath)); + requestedPath = + TrimTrailingSlashFromRequestedPath(requestedPath); + + var match = + routePathPattern.Match(requestedPath); return new RoutePatternMatchResult( match.Success, @@ -55,9 +58,9 @@ private static DynamicDictionary GetParameters(Regex regex, GroupCollection grou { dynamic data = new DynamicDictionary(); - for (int i = 1; i <= groups.Count; i++) + for (var i = 1; i <= groups.Count; i++) { - data[regex.GroupNameFromNumber(i)] = Uri.UnescapeDataString(groups[i].Value); + data[regex.GroupNameFromNumber(i)] = groups[i].Value; } return data;