From b4677a44daef94fdd0cc1890011d211e6d7e04f7 Mon Sep 17 00:00:00 2001 From: ivano scifoni Date: Mon, 11 Jul 2016 19:53:33 +0200 Subject: [PATCH] #4847 Fix MapAreaRoute override existing area constraint (#4954) * #4847 Fix MapAreaRoute override existing area constraint Modify Test project Modify web test routing * wrong field tested * IntRouteConstraint expected * Default for area route on Travel area * Removed commented code simplify constraintsDictionary area assign renamed test method * test name * renamedd test to MapAreaRoute_DoesNotReplaceValuesForAreaIfAlreadyPresentInConstraintsOrDefaults --- .../Builder/MvcAreaRouteBuilderExtensions.cs | 4 ++-- .../Builder/MvcAreaRouteBuilderExtensionsTest.cs | 6 +++--- test/WebSites/RoutingWebSite/Startup.cs | 11 +++++++---- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcAreaRouteBuilderExtensions.cs b/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcAreaRouteBuilderExtensions.cs index 1f5254f048..c7436cc749 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcAreaRouteBuilderExtensions.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/Builder/MvcAreaRouteBuilderExtensions.cs @@ -128,10 +128,10 @@ namespace Microsoft.AspNetCore.Builder } var defaultsDictionary = new RouteValueDictionary(defaults); - defaultsDictionary["area"] = areaName; + defaultsDictionary["area"] = defaultsDictionary["area"] ?? areaName; var constraintsDictionary = new RouteValueDictionary(constraints); - constraintsDictionary["area"] = areaName; + constraintsDictionary["area"] = constraintsDictionary["area"] ?? areaName; routeBuilder.MapRoute(name, template, defaultsDictionary, constraintsDictionary, dataTokens); return routeBuilder; diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs index f59295b3f6..278cd937a3 100644 --- a/test/Microsoft.AspNetCore.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/Builder/MvcAreaRouteBuilderExtensionsTest.cs @@ -185,7 +185,7 @@ namespace Microsoft.AspNetCore.Builder } [Fact] - public void MapAreaRoute_ReplacesValuesForArea() + public void MapAreaRoute_DoesNotReplaceValuesForAreaIfAlreadyPresentInConstraintsOrDefaults() { // Arrange var builder = CreateRouteBuilder(); @@ -209,7 +209,7 @@ namespace Microsoft.AspNetCore.Builder kvp => { Assert.Equal(kvp.Key, "area"); - Assert.IsType(kvp.Value); + Assert.IsType(kvp.Value); }); Assert.Collection( route.DataTokens.OrderBy(kvp => kvp.Key), @@ -223,7 +223,7 @@ namespace Microsoft.AspNetCore.Builder kvp => { Assert.Equal(kvp.Key, "area"); - Assert.Equal(kvp.Value, "admin"); + Assert.Equal(kvp.Value, "Home"); }); } diff --git a/test/WebSites/RoutingWebSite/Startup.cs b/test/WebSites/RoutingWebSite/Startup.cs index d9be0354dc..969a7c3ea1 100644 --- a/test/WebSites/RoutingWebSite/Startup.cs +++ b/test/WebSites/RoutingWebSite/Startup.cs @@ -26,10 +26,13 @@ namespace RoutingWebSite app.UseMvc(routes => { - routes.MapRoute( - "areaRoute", - "{area:exists}/{controller}/{action}", - new { controller = "Home", action = "Index" }); + routes.MapAreaRoute( + "flightRoute", + "adminRoute", + "{area:exists}/{controller}/{action}", + new { controller = "Home", action = "Index" }, + new { area = "Travel" } + ); routes.MapRoute( "ActionAsMethod",