Adding object-dictionary support for defaults

This commit is contained in:
Ryan Nowak 2014-02-26 11:50:13 -08:00
parent 4022e5a5a4
commit bdd4513b88
3 changed files with 39 additions and 1 deletions

View File

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

View File

@ -0,0 +1,33 @@

using System;
using System.Collections.Generic;
using System.Reflection;
namespace Microsoft.AspNet.Routing
{
public class RouteValueDictionary : Dictionary<string, object>
{
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<string, object> other)
: base(other, StringComparer.OrdinalIgnoreCase)
{
}
}
}

View File

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