使用XML文件来动态配置ASP.NET MVC的Route规则
2009-06-20 23:19
525 查看
一般情况下,我们都是直接在Global.asax.cs文件中直接写上Route规则的,例如:
这样在我们的程序编译、部署后,我们想修改这个Route规则就得重新修改程序中Global.asax.cs文件中的Route规则=>编译=>部署,不可以做到动态配置。
其实我们可以做到动态配置,我们可以将这个Route规则写到一个XML文件中,例如这样:
我们例如Web.config中的configSection来写我们的自定义配置节,来配置上面的XML文件。首先,我需要写一个定义的configSection,他继承自ConfigurationSection,如下:
然后我们写一个扩展方法来自定义将我们配置好的Route规则写入到程序路由表中:
然后在web.config中的configSections配置节下加入我们写好的MvcRouteConfigurationSection :
最后,在Global.asax.cs中用我们刚才写的MapRoute扩展方法来注册我们的Route规则:
OK,大功告成。Enjoy! by Q.Lee.lulu.
原文见:ASP.NET MVC Routing Using XML Custom Configuration Settings
本文的示例代码在原文的代码基础上添加了对约束(constraints)的支持!
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", // URL with parameters new { controller = "Home", action = "Index", id = "" } // Parameter defaults ); }
这样在我们的程序编译、部署后,我们想修改这个Route规则就得重新修改程序中Global.asax.cs文件中的Route规则=>编译=>部署,不可以做到动态配置。
其实我们可以做到动态配置,我们可以将这个Route规则写到一个XML文件中,例如这样:
<RouteConfiguration> <ignore> <!--忽略对.axd文件的Route,直接处理--> <add url="{resource}.axd/{*pathInfo}" > <constraints> <!--添加约束,value是乱写的,只为演示--> <add name="resource" value="\w" /> </constraints> </add> </ignore> <map> <route name="Post" url="Post/{id}" controller="Home" action="Post" > <parameters> <!--添加参数默认值--> <!--添加约束,id必须为GUID--> <add name="id" value="" constraint="[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}" /> </parameters> </route> <route name="Default" url="{controller}/{action}/{id}" controller="Home" action="Index" > <parameters> <add name="id" value="" /> </parameters> </route> </map> </RouteConfiguration>
我们例如Web.config中的configSection来写我们的自定义配置节,来配置上面的XML文件。首先,我需要写一个定义的configSection,他继承自ConfigurationSection,如下:
public class MvcRouteConfigurationSection : ConfigurationSection { [ConfigurationProperty("ignore", IsRequired=false)] public IgnoreCollection Ignore { get { return (IgnoreCollection)(this["ignore"]); } } [ConfigurationProperty("map", IsRequired=false)] public RoutingCollection Map { get { return (RoutingCollection)(this["map"]); } } }
然后我们写一个扩展方法来自定义将我们配置好的Route规则写入到程序路由表中:
public static void MapRoute( this System.Web.Routing.RouteCollection routes, MvcRouteConfigurationSection section ) { // Manipulate the Ignore List foreach(IgnoreItem ignoreItem in section.Ignore) { RouteValueDictionary ignoreConstraints = new RouteValueDictionary(); foreach (Constraint constraint in ignoreItem.Constraints) ignoreConstraints.Add(constraint.Name, constraint.Value); IgnoreRoute(routes, ignoreItem.Url, ignoreConstraints); } // Manipluate the Routing Table foreach (RoutingItem routingItem in section.Map) { RouteValueDictionary defaults = new RouteValueDictionary(); RouteValueDictionary constraints = new RouteValueDictionary(); if (routingItem.Controller != string.Empty) defaults.Add("controller", routingItem.Controller); if (routingItem.Action != string.Empty) defaults.Add("action", routingItem.Action); foreach (Parameter param in routingItem.Paramaters) { defaults.Add(param.Name, param.Value); if (!string.IsNullOrEmpty(param.Constraint)) { constraints.Add(param.Name, param.Constraint); } } MapRoute(routes, routingItem.Name, routingItem.Url, defaults, constraints); } }
然后在web.config中的configSections配置节下加入我们写好的MvcRouteConfigurationSection :
<section name="RouteConfiguration" type="MvcXmlRouting.MvcRouteConfigurationSection"/>
最后,在Global.asax.cs中用我们刚才写的MapRoute扩展方法来注册我们的Route规则:
public class MvcApplication : System.Web.HttpApplication { public static void RegisterRoutes(RouteCollection routes) { MvcRouteConfigurationSection section = (MvcRouteConfigurationSection)ConfigurationManager.GetSection("RouteConfiguration"); routes.MapRoute(section); } protected void Application_Start() { RegisterRoutes(RouteTable.Routes); } }
OK,大功告成。Enjoy! by Q.Lee.lulu.
原文见:ASP.NET MVC Routing Using XML Custom Configuration Settings
本文的示例代码在原文的代码基础上添加了对约束(constraints)的支持!
相关文章推荐
- 使用XML文件来动态配置ASP.NET MVC的Route规则
- 使用XML文件来动态配置ASP.NET MVC的Route规则 【转】
- 使用XML文件来动态配置ASP.NET MVC的Route规则
- [转]使用XML文件来动态配置ASP.NET MVC的Route规则
- 使用XML文件来动态配置ASP.NET MVC的Route规则
- 【转】使用XML文件来动态配置ASP.NET MVC的Route规则
- asp.net mvc Route 使用自定义条件(constraints)禁止某ip登陆
- 使用RouteValueDictionary简化对Asp.net MVC Helper的扩展
- 深入ASP.NET MVC Model验证-使用.NET验证特性类指定Mode验证规则
- Asp.net MVC验证哪些事(2)-- 验证规则总结以及使用
- ASP.NET MVC 使用总结(二)——扩展HtmlHelper实现动态生成title及meta
- FCK在MVC和ASP.NET中的配置和使用
- C# asp.net mvc 配置多个route 参数
- asp.net MVC中使用自定义HtmlForm控件动态生成表单
- 在ASP.Net MVC 中,如何在Global.asax中配置一个指向Area内部的默认Route
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
- 史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦
- ASP.NET MVC 2.0 in Vs2010 :使用C# 4.0中使用动态类型来传递ViewData
- 使用Route Prefix 使用属性路由 精通ASP-NET-MVC-5-弗瑞曼
- 使用RouteValueDictionary简化对Asp.net MVC Helper的扩展