From 42ce8c6594e5a99bf7d8a194e76c907c7468216c Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Tue, 11 Feb 2014 12:21:40 -0800 Subject: [PATCH] Adding routebuilder --- .../RoutingSample/RouteBuilderExtensions.cs | 14 +++++++++++ samples/RoutingSample/Startup.cs | 12 ++++++---- src/Microsoft.AspNet.Routing/IRouteBuilder.cs | 17 +++++++++++++ src/Microsoft.AspNet.Routing/RouteBuilder.cs | 24 +++++++++++++++++++ .../Template/RouteBuilderExtensions.cs | 19 +++++++++++++++ 5 files changed, 82 insertions(+), 4 deletions(-) create mode 100644 samples/RoutingSample/RouteBuilderExtensions.cs create mode 100644 src/Microsoft.AspNet.Routing/IRouteBuilder.cs create mode 100644 src/Microsoft.AspNet.Routing/RouteBuilder.cs create mode 100644 src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs diff --git a/samples/RoutingSample/RouteBuilderExtensions.cs b/samples/RoutingSample/RouteBuilderExtensions.cs new file mode 100644 index 0000000000..2848864774 --- /dev/null +++ b/samples/RoutingSample/RouteBuilderExtensions.cs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +using Microsoft.AspNet.Routing; + +namespace RoutingSample +{ + public static class RouteBuilderExtensions + { + public static void AddPrefixRoute(this IRouteBuilder builder, string prefix) + { + builder.Routes.Add(new PrefixRoute(builder.Endpoint, prefix)); + } + } +} diff --git a/samples/RoutingSample/Startup.cs b/samples/RoutingSample/Startup.cs index d169128183..ee7c7a3665 100644 --- a/samples/RoutingSample/Startup.cs +++ b/samples/RoutingSample/Startup.cs @@ -3,6 +3,7 @@ #if NET45 using Microsoft.AspNet.Abstractions; +using Microsoft.AspNet.Routing; using Microsoft.AspNet.Routing.Owin; using Microsoft.AspNet.Routing.Template; using Owin; @@ -25,10 +26,13 @@ namespace RoutingSample var endpoint1 = new HttpContextRouteEndpoint(async (context) => await context.Response.WriteAsync("match1")); var endpoint2 = new HttpContextRouteEndpoint(async (context) => await context.Response.WriteAsync("Hello, World!")); - routes.Add(new PrefixRoute(endpoint1, "api/store")); - routes.Add(new TemplateRoute(endpoint1, "api/checkout/{*extra}")); - routes.Add(new PrefixRoute(endpoint2, "hello/world")); - routes.Add(new PrefixRoute(endpoint1, "")); + var rb1 = new RouteBuilder(endpoint1, routes); + rb1.AddPrefixRoute("api/store"); + rb1.AddTemplateRoute("api/checkout/{*extra}"); + + var rb2 = new RouteBuilder(endpoint2, routes); + rb2.AddPrefixRoute("hello/world"); + rb2.AddPrefixRoute(""); } } } diff --git a/src/Microsoft.AspNet.Routing/IRouteBuilder.cs b/src/Microsoft.AspNet.Routing/IRouteBuilder.cs new file mode 100644 index 0000000000..87f67506cc --- /dev/null +++ b/src/Microsoft.AspNet.Routing/IRouteBuilder.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +namespace Microsoft.AspNet.Routing +{ + public interface IRouteBuilder + { + IRouteEndpoint Endpoint + { + get; + } + + IRouteCollection Routes + { + get; + } + } +} diff --git a/src/Microsoft.AspNet.Routing/RouteBuilder.cs b/src/Microsoft.AspNet.Routing/RouteBuilder.cs new file mode 100644 index 0000000000..638c983276 --- /dev/null +++ b/src/Microsoft.AspNet.Routing/RouteBuilder.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +namespace Microsoft.AspNet.Routing +{ + public class RouteBuilder : IRouteBuilder + { + public RouteBuilder(IRouteEndpoint endpoint, IRouteCollection routes) + { + Endpoint = endpoint; + Routes = routes; + } + public IRouteEndpoint Endpoint + { + get; + private set; + } + + public IRouteCollection Routes + { + get; + private set; + } + } +} diff --git a/src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs b/src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs new file mode 100644 index 0000000000..f6d706d29b --- /dev/null +++ b/src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information. + +using System.Collections.Generic; + +namespace Microsoft.AspNet.Routing.Template +{ + public static class RouteBuilderExtensions + { + public static void AddTemplateRoute(this IRouteBuilder builder, string template) + { + AddTemplateRoute(builder, template, null); + } + + public static void AddTemplateRoute(this IRouteBuilder builder, string template, IDictionary defaults) + { + builder.Routes.Add(new TemplateRoute(builder.Endpoint, template, defaults)); + } + } +}