From 6ef2fe44ca00748fa3f9e0458207224820b35731 Mon Sep 17 00:00:00 2001 From: Ajay Bhargav Baaskaran Date: Tue, 13 Oct 2015 12:45:37 -0700 Subject: [PATCH] [Fixes #3250] Remove RouteGroup from RouteValues --- .../Infrastructure/MvcRouteHandler.cs | 4 ++ .../Infrastructure/MvcRouteHandlerTests.cs | 38 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/src/Microsoft.AspNet.Mvc.Core/Infrastructure/MvcRouteHandler.cs b/src/Microsoft.AspNet.Mvc.Core/Infrastructure/MvcRouteHandler.cs index ee0cf5e79c..95da719e7c 100644 --- a/src/Microsoft.AspNet.Mvc.Core/Infrastructure/MvcRouteHandler.cs +++ b/src/Microsoft.AspNet.Mvc.Core/Infrastructure/MvcRouteHandler.cs @@ -8,6 +8,7 @@ using Microsoft.AspNet.Http; using Microsoft.AspNet.Mvc.Abstractions; using Microsoft.AspNet.Mvc.Core; using Microsoft.AspNet.Mvc.Internal; +using Microsoft.AspNet.Mvc.Routing; using Microsoft.AspNet.Routing; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; @@ -78,6 +79,9 @@ namespace Microsoft.AspNet.Mvc.Infrastructure } } + // Removing RouteGroup from RouteValues to simulate the result of conventional routing + newRouteData.Values.Remove(AttributeRouting.RouteGroupKey); + try { context.RouteData = newRouteData; diff --git a/test/Microsoft.AspNet.Mvc.Core.Test/Infrastructure/MvcRouteHandlerTests.cs b/test/Microsoft.AspNet.Mvc.Core.Test/Infrastructure/MvcRouteHandlerTests.cs index 1d770264ee..1c9e79c881 100644 --- a/test/Microsoft.AspNet.Mvc.Core.Test/Infrastructure/MvcRouteHandlerTests.cs +++ b/test/Microsoft.AspNet.Mvc.Core.Test/Infrastructure/MvcRouteHandlerTests.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using Microsoft.AspNet.Http; using Microsoft.AspNet.Mvc.Abstractions; using Microsoft.AspNet.Mvc.Internal; +using Microsoft.AspNet.Mvc.Routing; using Microsoft.AspNet.Routing; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Testing; @@ -111,6 +112,43 @@ namespace Microsoft.AspNet.Mvc.Infrastructure Assert.Equal(initialRouter, Assert.Single(context.RouteData.Routers)); } + [Fact] + public async Task RouteAsync_RemovesRouteGroupFromRouteValues() + { + // Arrange + RouteData actionRouteData = null; + var invoker = new Mock(); + invoker + .Setup(i => i.InvokeAsync()) + .Returns(Task.FromResult(true)); + + var invokerFactory = new Mock(); + invokerFactory + .Setup(f => f.CreateInvoker(It.IsAny())) + .Returns((c) => + { + actionRouteData = c.RouteData; + return invoker.Object; + }); + + var context = CreateRouteContext(invokerFactory: invokerFactory.Object); + var handler = new MvcRouteHandler(); + + var originalRouteData = context.RouteData; + originalRouteData.Values.Add(AttributeRouting.RouteGroupKey, "/Home/Test"); + + // Act + await handler.RouteAsync(context); + + // Assert + Assert.NotSame(originalRouteData, context.RouteData); + Assert.NotSame(originalRouteData, actionRouteData); + Assert.Same(actionRouteData, context.RouteData); + + // The new routedata is a copy + Assert.False(context.RouteData.Values.ContainsKey(AttributeRouting.RouteGroupKey)); + } + [Fact] public async Task RouteAsync_ResetsRouteDataOnException() {