private VirtualPathData NormalizeVirtualPath(VirtualPathData pathData) { if (pathData == null) { return(pathData); } var url = pathData.VirtualPath; if (!string.IsNullOrEmpty(url) && (_options.LowercaseUrls || _options.AppendTrailingSlash)) { var indexOfSeparator = url.IndexOfAny(UrlQueryDelimiters); var urlWithoutQueryString = url; var queryString = string.Empty; if (indexOfSeparator != -1) { urlWithoutQueryString = url.Substring(0, indexOfSeparator); queryString = url.Substring(indexOfSeparator); } if (_options.LowercaseUrls) { urlWithoutQueryString = urlWithoutQueryString.ToLowerInvariant(); } if (_options.LowercaseUrls && _options.LowercaseQueryStrings) { queryString = queryString.ToLowerInvariant(); } if (_options.AppendTrailingSlash && !urlWithoutQueryString.EndsWith("/")) { urlWithoutQueryString += "/"; } // queryString will contain the delimiter ? or # as the first character, so it's safe to append. url = urlWithoutQueryString + queryString; return(new VirtualPathData(pathData.Router, url, pathData.DataTokens)); } return(pathData); }
public void Constructor_CopiesDataTokens() { // Arrange var router = Mock.Of <IRouter>(); var path = "/virtual path"; var dataTokens = new RouteValueDictionary(); dataTokens["TestKey"] = "TestValue"; // Act var pathData = new VirtualPathData(router, path, dataTokens); // Assert Assert.Same(router, pathData.Router); Assert.Equal(path, pathData.VirtualPath); Assert.NotNull(pathData.DataTokens); Assert.Equal("TestValue", pathData.DataTokens["TestKey"]); Assert.Single(pathData.DataTokens); Assert.NotSame(dataTokens, pathData.DataTokens); }