From bdd4513b881c675403a720656b36e100449936a0 Mon Sep 17 00:00:00 2001 From: Ryan Nowak Date: Wed, 26 Feb 2014 11:50:13 -0800 Subject: [PATCH] Adding object-dictionary support for defaults --- samples/RoutingSample/Startup.cs | 2 +- .../RouteValueDictionary.cs | 33 +++++++++++++++++++ .../Template/RouteBuilderExtensions.cs | 5 +++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 src/Microsoft.AspNet.Routing/RouteValueDictionary.cs diff --git a/samples/RoutingSample/Startup.cs b/samples/RoutingSample/Startup.cs index ee7c7a3665..f780ac69b7 100644 --- a/samples/RoutingSample/Startup.cs +++ b/samples/RoutingSample/Startup.cs @@ -28,7 +28,7 @@ namespace RoutingSample var rb1 = new RouteBuilder(endpoint1, routes); rb1.AddPrefixRoute("api/store"); - rb1.AddTemplateRoute("api/checkout/{*extra}"); + rb1.AddTemplateRoute("api/{controller}/{*extra}", new { controller = "Store" }); var rb2 = new RouteBuilder(endpoint2, routes); rb2.AddPrefixRoute("hello/world"); diff --git a/src/Microsoft.AspNet.Routing/RouteValueDictionary.cs b/src/Microsoft.AspNet.Routing/RouteValueDictionary.cs new file mode 100644 index 0000000000..e17b1298cc --- /dev/null +++ b/src/Microsoft.AspNet.Routing/RouteValueDictionary.cs @@ -0,0 +1,33 @@ + +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace Microsoft.AspNet.Routing +{ + public class RouteValueDictionary : Dictionary + { + public RouteValueDictionary() + : base(StringComparer.OrdinalIgnoreCase) + { + } + + public RouteValueDictionary(object obj) + : base(StringComparer.OrdinalIgnoreCase) + { + if (obj != null) + { + foreach (var property in obj.GetType().GetTypeInfo().DeclaredProperties) + { + var value = property.GetValue(obj); + Add(property.Name, value); + } + } + } + + public RouteValueDictionary(IDictionary other) + : base(other, StringComparer.OrdinalIgnoreCase) + { + } + } +} diff --git a/src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs b/src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs index f6d706d29b..2434c19489 100644 --- a/src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs +++ b/src/Microsoft.AspNet.Routing/Template/RouteBuilderExtensions.cs @@ -15,5 +15,10 @@ namespace Microsoft.AspNet.Routing.Template { builder.Routes.Add(new TemplateRoute(builder.Endpoint, template, defaults)); } + + public static void AddTemplateRoute(this IRouteBuilder builder, string template, object defaults) + { + builder.Routes.Add(new TemplateRoute(builder.Endpoint, template, new RouteValueDictionary(defaults))); + } } }