非常抱歉,标题可能不够翔实,但我不知道该如何解释我要在问题中尝试做的事情。
因此,我有一个MVC应用程序,并且正在从Web.config
的配置部分加载路由。
为了封装配置元素中所需的所有信息,我创建了一个RouteModel。
IEnumerable<RouteModel> configuredRoutes = RoutingFacade.GetAllRoutes();
foreach(RouteModel route in configuredRoutes)
{
routes.MapRoute(route.Name, route.Url,
new { controller = "Home", action = "Index", managers = route.Managers });
}
忽略那里的经理钥匙。
到目前为止还不错,但是我的问题是这个。
我的
RouteModel
具有Constraints
属性,该属性返回具有该路由的所有已配置约束的List<ConstraintModel>
。ConstraintModel
仅具有两个属性,Name
和Value
。如您所知,
MapRoute
方法采用一个附加的object
参数作为约束,该对象的构造如下:new { constraint1 = value1, constraint2 = value2, .. }
如何将
List<ConstraintModel>
变成类似这样的内容?非常感谢您抽出宝贵的时间阅读我的问题,非常感谢
最佳答案
如果查看RouteCollection
类的方法,您会注意到有一个Add
方法(MSDN article here)。
您可以做的就是调用它(这是MapRoute
扩展方法最终完成的工作)
并根据需要创建Route
类的实例。
Dictionary<string, object> constraints = new Dictionary<string, object>();
// populate your constraints into the constraints dictionary here..
Dictionary<string, object> dataTokens = new Dictionary<string, object>();
Dictionary<string, object> defaults = new Dictionary<string, object>();
Route route = new Route(" << url >> ", new MvcRouteHandler())
{
Constraints = new RouteValueDictionary(constraints),
DataTokens = new RouteValueDictionary(),
Defaults = new RouteValueDictionary()
};
routes.Add(route);
这样,您就有机会为约束指定
string
-object
对。编辑
此外,如果您对如何使用此方法有任何疑问,但对
MapRoute
扩展方法有什么了解,我建议您使用ILSpy来反汇编定义MapRoute
(即System.Web.Mvc.dll
)的程序集。并逐步了解自己的MapRoute
和RouteCollection.Add
之间的联系。编辑2-关于路线名称
您还可以检查过载
RouteCollection.Add(string name, RouteBase item)
。这是您可以指定路线名称的一种方式。
所以基本上您可以执行以下操作:
routes.Add(" My route with dynamically loaded constraints ", route);