diff --git a/samples/RoutingSample.Web/Startup.cs b/samples/RoutingSample.Web/Startup.cs
index 9acde00e9b..d24a679e6d 100644
--- a/samples/RoutingSample.Web/Startup.cs
+++ b/samples/RoutingSample.Web/Startup.cs
@@ -18,7 +18,7 @@ namespace RoutingSample.Web
.HttpContext
.Response
.WriteAsync(
- "match1, route values -" + context.Values.Print()));
+ "match1, route values -" + context.RouteData.Values.Print()));
var endpoint2 = new DelegateRouteEndpoint(async (context) =>
await context
diff --git a/src/Microsoft.AspNet.Routing/Microsoft.AspNet.Routing.kproj b/src/Microsoft.AspNet.Routing/Microsoft.AspNet.Routing.kproj
index 4b13433a79..fd6d50748f 100644
--- a/src/Microsoft.AspNet.Routing/Microsoft.AspNet.Routing.kproj
+++ b/src/Microsoft.AspNet.Routing/Microsoft.AspNet.Routing.kproj
@@ -41,6 +41,7 @@
+
diff --git a/src/Microsoft.AspNet.Routing/RouteContext.cs b/src/Microsoft.AspNet.Routing/RouteContext.cs
index e7cf339ed6..9224c504df 100644
--- a/src/Microsoft.AspNet.Routing/RouteContext.cs
+++ b/src/Microsoft.AspNet.Routing/RouteContext.cs
@@ -1,18 +1,21 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-using System.Collections.Generic;
using Microsoft.AspNet.Http;
+using System;
namespace Microsoft.AspNet.Routing
{
public class RouteContext
{
+ private RouteData _routeData;
+
public RouteContext(HttpContext httpContext)
{
HttpContext = httpContext;
RequestPath = httpContext.Request.Path.Value;
+ RouteData = new RouteData();
}
public HttpContext HttpContext { get; private set; }
@@ -21,8 +24,21 @@ namespace Microsoft.AspNet.Routing
public string RequestPath { get; private set; }
- public IRouter Router { get; set; }
+ public RouteData RouteData
+ {
+ get
+ {
+ return _routeData;
+ }
+ set
+ {
+ if (value == null)
+ {
+ throw new ArgumentNullException("value");
+ }
- public IDictionary Values { get; set; }
+ _routeData = value;
+ }
+ }
}
}
diff --git a/src/Microsoft.AspNet.Routing/RouteData.cs b/src/Microsoft.AspNet.Routing/RouteData.cs
new file mode 100644
index 0000000000..5a959284d7
--- /dev/null
+++ b/src/Microsoft.AspNet.Routing/RouteData.cs
@@ -0,0 +1,22 @@
+// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
+// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+
+using System.Collections.Generic;
+
+namespace Microsoft.AspNet.Routing
+{
+ ///
+ /// Summary description for RouteData
+ ///
+ public class RouteData
+ {
+ public RouteData()
+ {
+ Routers = new Stack();
+ }
+
+ public Stack Routers { get; private set; }
+
+ public IDictionary Values { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Microsoft.AspNet.Routing/RouterMiddleware.cs b/src/Microsoft.AspNet.Routing/RouterMiddleware.cs
index 4610e32390..253fb74df6 100644
--- a/src/Microsoft.AspNet.Routing/RouterMiddleware.cs
+++ b/src/Microsoft.AspNet.Routing/RouterMiddleware.cs
@@ -1,9 +1,9 @@
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
-using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Routing;
+using System.Threading.Tasks;
namespace Microsoft.AspNet.Builder
{
@@ -29,10 +29,8 @@ namespace Microsoft.AspNet.Builder
public async Task Invoke(HttpContext httpContext)
{
- var context = new RouteContext(httpContext)
- {
- Router = Router,
- };
+ var context = new RouteContext(httpContext);
+ context.RouteData.Routers.Push(Router);
await Router.RouteAsync(context);
if (!context.IsHandled)
diff --git a/src/Microsoft.AspNet.Routing/Template/TemplateRoute.cs b/src/Microsoft.AspNet.Routing/Template/TemplateRoute.cs
index c59a391afa..64b382ea57 100644
--- a/src/Microsoft.AspNet.Routing/Template/TemplateRoute.cs
+++ b/src/Microsoft.AspNet.Routing/Template/TemplateRoute.cs
@@ -88,7 +88,7 @@ namespace Microsoft.AspNet.Routing.Template
else
{
// Not currently doing anything to clean this up if it's not a match. Consider hardening this.
- context.Values = values;
+ context.RouteData.Values = values;
if (RouteConstraintMatcher.Match(Constraints,
values,
diff --git a/test/Microsoft.AspNet.Routing.Tests/Template/TemplateRouteTests.cs b/test/Microsoft.AspNet.Routing.Tests/Template/TemplateRouteTests.cs
index 08e2450ab2..5e7a500475 100644
--- a/test/Microsoft.AspNet.Routing.Tests/Template/TemplateRouteTests.cs
+++ b/test/Microsoft.AspNet.Routing.Tests/Template/TemplateRouteTests.cs
@@ -32,9 +32,9 @@ namespace Microsoft.AspNet.Routing.Template.Tests
// Assert
Assert.True(context.IsHandled);
- Assert.Equal(2, context.Values.Count);
- Assert.Equal("Home", context.Values["controller"]);
- Assert.Equal("Index", context.Values["action"]);
+ Assert.Equal(2, context.RouteData.Values.Count);
+ Assert.Equal("Home", context.RouteData.Values["controller"]);
+ Assert.Equal("Index", context.RouteData.Values["action"]);
}
[Fact]
@@ -49,7 +49,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
// Assert
Assert.True(context.IsHandled);
- Assert.Equal(0, context.Values.Count);
+ Assert.Equal(0, context.RouteData.Values.Count);
}
[Fact]
@@ -64,9 +64,9 @@ namespace Microsoft.AspNet.Routing.Template.Tests
// Assert
Assert.True(context.IsHandled);
- Assert.Equal(2, context.Values.Count);
- Assert.Equal("Home", context.Values["controller"]);
- Assert.Equal("Index", context.Values["action"]);
+ Assert.Equal(2, context.RouteData.Values.Count);
+ Assert.Equal("Home", context.RouteData.Values["controller"]);
+ Assert.Equal("Index", context.RouteData.Values["action"]);
}
[Fact]
@@ -97,7 +97,7 @@ namespace Microsoft.AspNet.Routing.Template.Tests
Assert.False(context.IsHandled);
// Issue #16 tracks this.
- Assert.NotNull(context.Values);
+ Assert.NotNull(context.RouteData.Values);
}
private static RouteContext CreateRouteContext(string requestPath)