diff --git a/src/Microsoft.AspNet.Mvc.Core/UrlHelper.cs b/src/Microsoft.AspNet.Mvc.Core/UrlHelper.cs index 923cf32b75..98366d3850 100644 --- a/src/Microsoft.AspNet.Mvc.Core/UrlHelper.cs +++ b/src/Microsoft.AspNet.Mvc.Core/UrlHelper.cs @@ -108,14 +108,7 @@ namespace Microsoft.AspNet.Mvc // VirtualPathData.VirtualPath returns string.Empty for null. Debug.Assert(pathData.VirtualPath != null); - var path = pathData.VirtualPath; - // See Routing Issue#31 - if (path.Length > 0 && path[0] != '/') - { - path = "/" + path; - } - - var fullPath = _httpContext.Request.PathBase.Add(new PathString(path)).Value; + var fullPath = _httpContext.Request.PathBase.Add(pathData.VirtualPath).Value; if (fullPath.Length == 0) { return "/"; diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Routing/InnerAttributeRouteTest.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Routing/InnerAttributeRouteTest.cs index 5dd4b4e7f8..9f86fc4694 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Routing/InnerAttributeRouteTest.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Routing/InnerAttributeRouteTest.cs @@ -404,7 +404,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(result); - Assert.Equal("template/5", result.VirtualPath); + Assert.Equal(new PathString("/template/5"), result.VirtualPath); Assert.Same(route, result.Router); Assert.Empty(result.DataTokens); @@ -412,14 +412,14 @@ namespace Microsoft.AspNet.Mvc.Routing } [Theory] - [InlineData("template/{parameter:int}", "template/5", 5)] - [InlineData("template/{parameter:int?}", "template/5", 5)] - [InlineData("template/{parameter:int?}", "template", null)] + [InlineData("template/{parameter:int}", "/template/5", 5)] + [InlineData("template/{parameter:int?}", "/template/5", 5)] + [InlineData("template/{parameter:int?}", "/template", null)] [InlineData("template/{parameter:int?}", null, "asdf")] - [InlineData("template/{parameter:alpha?}", "template/asdf", "asdf")] - [InlineData("template/{parameter:alpha?}", "template", null)] - [InlineData("template/{parameter:int:range(1,20)?}", "template", null)] - [InlineData("template/{parameter:int:range(1,20)?}", "template/5", 5)] + [InlineData("template/{parameter:alpha?}", "/template/asdf", "asdf")] + [InlineData("template/{parameter:alpha?}", "/template", null)] + [InlineData("template/{parameter:int:range(1,20)?}", "/template", null)] + [InlineData("template/{parameter:int:range(1,20)?}", "/template/5", 5)] [InlineData("template/{parameter:int:range(1,20)?}", null, 21)] public void AttributeRoute_GenerateLink_OptionalInlineParameter (string template, string expectedPath, object parameter) @@ -466,7 +466,7 @@ namespace Microsoft.AspNet.Mvc.Routing else { Assert.NotNull(result); - Assert.Equal(expectedPath, result.VirtualPath); + Assert.Equal(new PathString(expectedPath), result.VirtualPath); Assert.Same(route, result.Router); Assert.Empty(result.DataTokens); } @@ -516,7 +516,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(result); - Assert.Equal("template/5", result.VirtualPath); + Assert.Equal(new PathString("/template/5"), result.VirtualPath); Assert.Same(route, result.Router); Assert.Empty(result.DataTokens); @@ -561,7 +561,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(result); - Assert.Equal("template/5", result.VirtualPath); + Assert.Equal(new PathString("/template/5"), result.VirtualPath); Assert.Same(route, result.Router); Assert.Empty(result.DataTokens); @@ -606,7 +606,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(result); - Assert.Equal("first/5", result.VirtualPath); + Assert.Equal(new PathString("/first/5"), result.VirtualPath); Assert.Same(route, result.Router); Assert.Empty(result.DataTokens); @@ -710,7 +710,8 @@ namespace Microsoft.AspNet.Mvc.Routing IEnumerable namedEntries) { // Arrange - var expectedLink = namedEntries.First().Template.Parameters.Any() ? "template/5" : "template"; + var expectedLink = new PathString( + namedEntries.First().Template.Parameters.Any() ? "/template/5" : "/template"); var expectedGroup = "0&" + namedEntries.First().TemplateText; string selectedGroup = null; @@ -775,7 +776,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(result); - Assert.Equal("named", result.VirtualPath); + Assert.Equal(new PathString("/named"), result.VirtualPath); Assert.Same(route, result.Router); Assert.Empty(result.DataTokens); @@ -899,7 +900,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(result); - Assert.Equal("template/5", result.VirtualPath); + Assert.Equal(new PathString("/template/5"), result.VirtualPath); Assert.Same(route, result.Router); Assert.Empty(result.DataTokens); @@ -982,7 +983,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1001,7 +1002,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1036,7 +1037,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1055,7 +1056,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store/Index", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store/Index"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1088,7 +1089,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/AwesomeCo/dosomething/Store/Index", pathData.VirtualPath); + Assert.Equal(new PathString("/api/AwesomeCo/dosomething/Store/Index"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); @@ -1109,7 +1110,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1137,7 +1138,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store/Index/5", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store/Index/5"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); @@ -1181,7 +1182,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1200,7 +1201,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api/Store?id=5", pathData.VirtualPath); + Assert.Equal(new PathString("/api/Store?id=5"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1244,7 +1245,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api2/Blog", pathData.VirtualPath); + Assert.Equal(new PathString("/api2/Blog"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1277,7 +1278,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("api2/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/api2/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); @@ -1305,7 +1306,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("Help/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/Help/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1331,7 +1332,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("Help/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/Help/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1359,7 +1360,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("Help/Store", pathData.VirtualPath); + Assert.Equal(new PathString("/Help/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1387,7 +1388,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal("Store", pathData.VirtualPath); + Assert.Equal(new PathString("/Store"), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); } @@ -1406,56 +1407,56 @@ namespace Microsoft.AspNet.Mvc.Routing "Test/{val1}/{val2}.{val3?}", new {val1 = "someval1", val2 = "someval2", val3 = "someval3a"}, new {val3 = "someval3v"}, - "Test/someval1/someval2.someval3v", + "/Test/someval1/someval2.someval3v", }, new object[] { "Test/{val1}/{val2}.{val3?}", new {val3 = "someval3a"}, new {val1 = "someval1", val2 = "someval2", val3 = "someval3v" }, - "Test/someval1/someval2.someval3v", + "/Test/someval1/someval2.someval3v", }, new object[] { "Test/{val1}/{val2}.{val3?}", null, new {val1 = "someval1", val2 = "someval2" }, - "Test/someval1/someval2", + "/Test/someval1/someval2", }, new object[] { "Test/{val1}.{val2}.{val3}.{val4?}", new {val1 = "someval1", val2 = "someval2" }, new {val4 = "someval4", val3 = "someval3" }, - "Test/someval1.someval2.someval3.someval4", + "/Test/someval1.someval2.someval3.someval4", }, new object[] { "Test/{val1}.{val2}.{val3}.{val4?}", new {val1 = "someval1", val2 = "someval2" }, new {val3 = "someval3" }, - "Test/someval1.someval2.someval3", + "/Test/someval1.someval2.someval3", }, new object[] { "Test/.{val2?}", null, new {val2 = "someval2" }, - "Test/.someval2", + "/Test/.someval2", }, new object[] { "Test/.{val2?}", null, null, - "Test/", + "/Test/", }, new object[] { "Test/{val1}.{val2}", new {val1 = "someval1", val2 = "someval2" }, new {val3 = "someval3" }, - "Test/someval1.someval2?val3=someval3", + "/Test/someval1.someval2?val3=someval3", }, }; } @@ -1480,7 +1481,7 @@ namespace Microsoft.AspNet.Mvc.Routing // Assert Assert.NotNull(pathData); - Assert.Equal(expected, pathData.VirtualPath); + Assert.Equal(new PathString(expected), pathData.VirtualPath); Assert.Same(route, pathData.Router); Assert.Empty(pathData.DataTokens); }