Синтаксический анализ и применение шаблона маршрута на самом деле довольно просто, используя Microsoft.AspNetCore.Routing
:
string route = "/myroute/{country}/{name}-{type}";
string input = "/myroute/Denmark/MyName-MyType";
var routeTemplate = TemplateParser.Parse(route);
var matcher = new TemplateMatcher(routeTemplate, null);
var values = new RouteValueDictionary();
if (matcher.TryMatch(input, values))
{
foreach (var item in values)
{
Console.WriteLine("{0}: {1}", item.Key, item.Value);
}
}
country: Denmark
type: MyType
name: MyName
Однако привязка этого объекта к сущности будет означать, что у вас будетцелое связывание модели стек, который оказывается "немного" более сложным, чтобы раскручиваться по отдельности.Поэтому вместо этого я бы порекомендовал вам сделать это вручную, используя немного размышлений:
public static T BindValues<T>(RouteValueDictionary values)
where T : new()
{
var obj = new T();
foreach (var prop in typeof(T).GetProperties())
{
if (values.ContainsKey(prop.Name))
{
prop.SetValue(obj, values[prop.Name]);
}
}
return obj;
}
И использовать так:
var obj = BindValues<MyViewModel>(values);
Хотя это, очевидно, намного менее мощныйчем привязка модели, она должна работать достаточно хорошо для вашего варианта использования.