diff --git a/src/Microsoft.AspNetCore.Routing/RouteCollection.cs b/src/Microsoft.AspNetCore.Routing/RouteCollection.cs
index 0d93c1f9ac..1d359cee57 100644
--- a/src/Microsoft.AspNetCore.Routing/RouteCollection.cs
+++ b/src/Microsoft.AspNetCore.Routing/RouteCollection.cs
@@ -139,7 +139,7 @@ namespace Microsoft.AspNetCore.Routing
var url = pathData.VirtualPath;
- if (!string.IsNullOrEmpty(url) && (_options.LowercaseUrls || _options.AppendTrailingSlash))
+ if (!string.IsNullOrEmpty(url) && (_options.LowercaseUrls || _options.LowercaseQueryStrings || _options.AppendTrailingSlash))
{
var indexOfSeparator = url.IndexOfAny(UrlQueryDelimiters);
var urlWithoutQueryString = url;
@@ -154,11 +154,11 @@ namespace Microsoft.AspNetCore.Routing
if (_options.LowercaseUrls)
{
urlWithoutQueryString = urlWithoutQueryString.ToLowerInvariant();
+ }
- if (!string.IsNullOrEmpty(queryString))
- {
- queryString = queryString.ToLowerInvariant();
- }
+ if (_options.LowercaseQueryStrings)
+ {
+ queryString = queryString.ToLowerInvariant();
}
if (_options.AppendTrailingSlash && !urlWithoutQueryString.EndsWith("/"))
diff --git a/src/Microsoft.AspNetCore.Routing/RouteOptions.cs b/src/Microsoft.AspNetCore.Routing/RouteOptions.cs
index 1ae47ed13f..45f5589ed0 100644
--- a/src/Microsoft.AspNetCore.Routing/RouteOptions.cs
+++ b/src/Microsoft.AspNetCore.Routing/RouteOptions.cs
@@ -10,10 +10,15 @@ namespace Microsoft.AspNetCore.Routing
public class RouteOptions
{
///
- /// Gets or sets a value indicating whether all generated URLs are lower-case.
+ /// Gets or sets a value indicating whether all generated URLs are lower-case. it doesn't include the query string.
///
public bool LowercaseUrls { get; set; }
+ ///
+ /// Gets or sets a value indicating whether all generated QUERY STRINGS are lower-case.
+ ///
+ public bool LowercaseQueryStrings { get; set; }
+
///
/// Gets or sets a value indicating whether a trailing slash should be appended to the generated URLs.
///