浅析ASP.NET MVC路由规则XML化的方法_绿色软件之家

绿色软件之家:您身边最放心的安全下载站! 最新更新|软件分类|软件专题|手机版|论坛转贴|软件发布

您当前所在位置: 首页网络编程.Net编程 → 浅析ASP.NET MVC路由规则XML化的方法

浅析ASP.NET MVC路由规则XML化的方法

时间:2015-06-28 00:00:00 来源:绿色软件之家 作者:网管联盟 我要评论(0)

  由于MVC框架发展不久,还有很多不足的地方。其中关于路由规则配置这一块问题比较大。首先路由规则是在全局配置问价 Global.asax 的 Application_Start()事件中注册的。

  public static void RegisterRoutes(RouteCollection routes)

  {

  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute( "User",

  // Route name

  "{controller}/{action}/{id}",

  // URL with parameters???? new { controller = "User", action = "Show", id = "0" }

  // Parameter defaults

  );

  }

  protected void Application_Start()

  {

  RegisterRoutes(RouteTable.Routes);

  }

  默认硬编码的方式使得以后可维护程度大大降低。MVC 1.0 似乎没有提供很好的基于配置文件的路由规则设置。所以只好自己实现了。直到写这篇文章时,才找到了一个比较好的解决方案。

  以下是 自定义的XML 格式

  ??? ?

  ?????

  

  

  

  

  

  

  

  

  

  

  

  

  

  

  ? 以下是全部代码

  ***********************************************/

  using System;

  using System.Collections.Generic;

  using System.Linq;

  using System.Text;

  using System.Web.Routing;

  using System.Web.Mvc;

  using System.Xml.Linq;

  using Microsoft.CSharp;

  using System.CodeDom.Compiler;

  namespace Tension.Mvc

  {

  public static class RouteHelper

  {

  ///

  /// 从XML文件中注册路由规则

  ///

  ///

  ///

  public static void Register(this RouteCollection routes, string cfgFile)

  {

  IList Routes = GetRoutes(cfgFile);

  foreach (var item in Routes)

  {

  //路由规则对象

  object obj = CreateObjectFormString(item.ToString(), item.Name);

  routes.MapRoute(

  item.Name,

  // Route name

  item.Url,

  // URL with parameters

  obj

  // Parameter defaults

  );

  }

  }

  ///

  ///? 从XML文件中注册路由规则 默认文件为网站根目录下MapRoute.config

  ///

///

  public static void Register(this RouteCollection routes)

  {

  Register(routes, string.Format("{0}\\MapRoute.config", Tension.ServerInfo.GetRootPath()));

  }

  ///

  /// 从string动态创建类对象

  ///

  ///

  ///

  ///

  private static object CreateObjectFormString(string codeString, string className)

  {

  CSharpCodeProvider ccp = new CSharpCodeProvider();

  CompilerParameters param = new CompilerParameters(new string[] { "System.dll" });

  CompilerResults cr = ccp.CompileAssemblyFromSource(param, codeString);

  Type type = cr.CompiledAssembly.GetType(className);

  return type.GetConstructor(System.Type.EmptyTypes).Invoke(null);

  }

#p#副标题#e#

  ///

??? /// 从XML文件中解析路由规则??? ///

  /// ??? ///

  private static IList GetRoutes(string configFile)

  {

  StringBuilder sb = new StringBuilder();

  Console.WriteLine(sb.ToString());

  IList Routes = new List();

  XElement xe = XElement.Load(configFile);

  #region MyRegion??? foreach (var item in xe.Elements("MapRoute"))

  {

  名称属性??? XAttribute xaName = item.Attribute("name");

  if (xaName == null || string.IsNullOrEmpty(xaName.Value))

  {

  throw new ArgumentNullException("name!说明:路由配置文件中某规则缺少name属性或name属性的值为空字符串");

  }

  //URL属性??? XAttribute urlName = item.Attribute("url");

  if (urlName == null || string.IsNullOrEmpty(urlName.Value))

  {

  throw new ArgumentNullException("url!说明:路由配置文件中某规则缺少url属性或url属性的值为空字符串");

  }

  Dictionary DictParams = new Dictionary();

  #region MyRegion

  foreach (var pItem in item.Element("Params").Elements("Item"))

  {

  XAttribute itemKey = pItem.Attribute("key");

  if (itemKey == null || string.IsNullOrEmpty(itemKey.Value))

  {

  throw new ArgumentNullException("Item->key!说明:路由配置文件中某规则缺少Item->key属性或Item->key属性的值为空字符串");

  }

  XAttribute itemDefault = pItem.Attribute("default");

  if (itemDefault == null || string.IsNullOrEmpty(itemDefault.Value))

  {

  throw new ArgumentNullException("Item->default!说明:路由配置文件中某规则缺少Item->default属性或Item->default属性的值为空字符串");

  }

  DictParams.Add(itemKey.Value, itemDefault.Value);

  }

  #endregion??? Routes.Add(new Route()

  {

  Name = xaName.Value, Url = urlName.Value, Params = DictParams });

  }

  #endregion???? return Routes;

  }

  }

  ///

???? /// 路由规则???? ///

  public class Route???? {

  public string Name { get; set; }

  public string Url { get; set; }

  public Dictionary Params { get; set; }

  ///

??? /// 重写ToString 方法 产生需要动态代码段

  ///

????? /// ???? public override string ToString()

  {

  StringBuilder sb = new StringBuilder();

  sb.

关键词标签:ASP.NET,MVC,路由规则

相关阅读

文章评论
发表评论

热门文章 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 钟离圣遗物推荐-原神钟离圣遗物词条 钟离圣遗物推荐-原神钟离圣遗物词条 解决方法:应用程序“DEFAULT WEB SITE”中的服务器错误 解决方法:应用程序“DEFAULT WEB SITE”中的服务器错误 使用aspnet_regiis.exe 重新注册.NET Framework 使用aspnet_regiis.exe 重新注册.NET Framework

相关下载

    人气排行 诛仙3飞升任务怎么做-诛仙3飞升任务流程最新2022 asp.net表单提交方法GET\POST 在ASP.NET中如何判断用户IE浏览器的版本 Asp.net中messagebox的实现方法 Asp.net中的web.config配置 在ASP.NET MVC中实现大文件异步上传 asp.net获取URL和IP地址 FileUpload上传多文件出现错误的解决方法