Skip to content
This repository was archived by the owner on Nov 27, 2018. It is now read-only.

Commit cb77c17

Browse files
kishan.anemrynowak
kishan.anem
authored andcommitted
TestCase added and IUrlHelper and support for RouteOptions.LowercaseUrls
checked appliesd to the query string. @rynowak #518 #Issue: aspnet/Mvc#7720
1 parent f227cbe commit cb77c17

File tree

3 files changed

+43
-4
lines changed

3 files changed

+43
-4
lines changed

src/Microsoft.AspNetCore.Routing/RouteCollection.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,7 @@ private VirtualPathData NormalizeVirtualPath(VirtualPathData pathData)
139139

140140
var url = pathData.VirtualPath;
141141

142-
if (!string.IsNullOrEmpty(url) && (_options.LowercaseUrls || _options.LowercaseQueryStrings || _options.AppendTrailingSlash))
142+
if (!string.IsNullOrEmpty(url) && (_options.LowercaseUrls || _options.AppendTrailingSlash))
143143
{
144144
var indexOfSeparator = url.IndexOfAny(UrlQueryDelimiters);
145145
var urlWithoutQueryString = url;
@@ -156,7 +156,7 @@ private VirtualPathData NormalizeVirtualPath(VirtualPathData pathData)
156156
urlWithoutQueryString = urlWithoutQueryString.ToLowerInvariant();
157157
}
158158

159-
if (_options.LowercaseQueryStrings)
159+
if (_options.LowercaseUrls && _options.LowercaseQueryStrings)
160160
{
161161
queryString = queryString.ToLowerInvariant();
162162
}

src/Microsoft.AspNetCore.Routing/RouteOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class RouteOptions
1515
public bool LowercaseUrls { get; set; }
1616

1717
/// <summary>
18-
/// Gets or sets a value indicating whether all generated QUERY STRINGS are lower-case.
18+
/// Gets or sets a value indicating whether all generated QUERY STRINGS are lower-case. property will when LowercaseUrls true.
1919
/// </summary>
2020
public bool LowercaseQueryStrings { get; set; }
2121

test/Microsoft.AspNetCore.Routing.Tests/RouteCollectionTest.cs

Lines changed: 40 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,44 @@ public void GetVirtualPath_DoesntLowerCaseUrls_Invariant(
8989
Assert.Empty(pathData.DataTokens);
9090
}
9191

92+
[Theory]
93+
[InlineData(@"Home/Index/23?Param1=ABC&Param2=Xyz", "/Home/Index/23?Param1=ABC&Param2=Xyz", false, true, false)]
94+
[InlineData(@"Home/Index/23?Param1=ABC&Param2=Xyz", "/Home/Index/23?Param1=ABC&Param2=Xyz", false, false, false)]
95+
[InlineData(@"Home/Index/23?Param1=ABC&Param2=Xyz", "/home/index/23/?param1=abc&param2=xyz", true, true, true)]
96+
[InlineData(@"Home/Index/23#Param1=ABC&Param2=Xyz", "/Home/Index/23/#Param1=ABC&Param2=Xyz", false, true, true)]
97+
[InlineData(@"Home/Index/23#Param1=ABC&Param2=Xyz", "/home/index/23#Param1=ABC&Param2=Xyz", true, false, false)]
98+
[InlineData(@"Home/Index/23/?Param1=ABC&Param2=Xyz", "/home/index/23/?param1=abc&param2=xyz", true, true, true)]
99+
[InlineData(@"Home/Index/23/#Param1=ABC&Param2=Xyz", "/home/index/23/#Param1=ABC&Param2=Xyz", true, false, true)]
100+
[InlineData(@"Home/Index/23/#Param1=ABC&Param2=Xyz", "/home/index/23/#param1=abc&param2=xyz", true, true, true)]
101+
public void GetVirtualPath_CanLowerCaseUrls_QueryStrings_BasedOnOptions(
102+
string returnUrl,
103+
string expectedUrl,
104+
bool lowercaseUrls,
105+
bool lowercaseQueryStrings, bool appendTrailingSlash)
106+
{
107+
// Arrange
108+
var target = new Mock<IRouter>(MockBehavior.Strict);
109+
target
110+
.Setup(e => e.GetVirtualPath(It.IsAny<VirtualPathContext>()))
111+
.Returns(new VirtualPathData(target.Object, returnUrl));
112+
113+
var routeCollection = new RouteCollection();
114+
routeCollection.Add(target.Object);
115+
var virtualPathContext = CreateVirtualPathContext(
116+
options: GetRouteOptions(
117+
lowerCaseUrls: lowercaseUrls,
118+
lowercaseQueryStrings: lowercaseQueryStrings,
119+
appendTrailingSlash: appendTrailingSlash));
120+
121+
// Act
122+
var pathData = routeCollection.GetVirtualPath(virtualPathContext);
123+
124+
// Assert
125+
Assert.Equal(expectedUrl, pathData.VirtualPath);
126+
Assert.Same(target.Object, pathData.Router);
127+
Assert.Empty(pathData.DataTokens);
128+
}
129+
92130
[Theory]
93131
[MemberData(nameof(DataTokensTestData))]
94132
public void GetVirtualPath_ReturnsDataTokens(RouteValueDictionary dataTokens, string routerName)
@@ -663,12 +701,13 @@ private static Mock<IRouter> CreateRoute(
663701

664702
private static Action<RouteOptions> GetRouteOptions(
665703
bool lowerCaseUrls = false,
666-
bool appendTrailingSlash = false)
704+
bool appendTrailingSlash = false, bool lowercaseQueryStrings = false)
667705
{
668706
return (options) =>
669707
{
670708
options.LowercaseUrls = lowerCaseUrls;
671709
options.AppendTrailingSlash = appendTrailingSlash;
710+
options.LowercaseQueryStrings = lowercaseQueryStrings;
672711
};
673712
}
674713
}

0 commit comments

Comments
 (0)