From d10682d15ba34b694a72297329786bdef0fcdbc3 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Wed, 4 Jun 2014 13:24:01 -0700 Subject: [PATCH] Issue aspnet/Mvc#56 - merging RouteContext and RequestContext This is the routing part of these changes, and just the breaking changes parts. Follow-ups will add: - DataTokens - Tracking the logical stack of routers --- samples/RoutingSample.Web/Startup.cs | 2 +- .../Microsoft.AspNet.Routing.kproj | 1 + src/Microsoft.AspNet.Routing/RouteContext.cs | 22 ++++++++++++++++--- src/Microsoft.AspNet.Routing/RouteData.cs | 22 +++++++++++++++++++ .../RouterMiddleware.cs | 8 +++---- .../Template/TemplateRoute.cs | 2 +- .../Template/TemplateRouteTests.cs | 16 +++++++------- 7 files changed, 55 insertions(+), 18 deletions(-) create mode 100644 src/Microsoft.AspNet.Routing/RouteData.cs 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)