[Fixes #3250] Remove RouteGroup from RouteValues

This commit is contained in:
Ajay Bhargav Baaskaran 2015-10-13 12:45:37 -07:00
parent 9b004611e5
commit 6ef2fe44ca
2 changed files with 42 additions and 0 deletions

View File

@ -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;

View File

@ -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<IActionInvoker>();
invoker
.Setup(i => i.InvokeAsync())
.Returns(Task.FromResult(true));
var invokerFactory = new Mock<IActionInvokerFactory>();
invokerFactory
.Setup(f => f.CreateInvoker(It.IsAny<ActionContext>()))
.Returns<ActionContext>((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()
{