精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺析ASP.NET MVC路由規則XML化的方法

開發 后端
本文由作者為大家介紹ASP.NET MVC路由規則XML化的方法,希望對大家的開發有所幫助。

本文主要針對的是ASP.NET MVC路由規則的問題,作者本次所研究的是ASP.NET MVC路由規則XML,希望那個通過本文能對大家有所幫助。

最近由于工作關系,重新回顧了ASP.NET MVC的1.0 版本。2.0版本還沒有研究。

由于MVC框架發展不久,還有很多不足的地方。其中關于路由規則配置這一塊問題比較大。首先路由規則是在全局配置問價 Global.asax 的 Application_Start()事件中注冊的。

  1. public static void RegisterRoutes(RouteCollection routes)    
  2.    {    
  3.        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");    
  4.         routes.MapRoute(    
  5.    "User",                                              // Route name    
  6.    "{controller}/{action}/{id}",                        // URL with parameters    
  7.  new { controller = "User", action = "Show", id = "0" } // Parameter defaults    
  8.         );    
  9.     }    
  10.     protected void Application_Start()    
  11.     {    
  12.         RegisterRoutes(RouteTable.Routes);    
  13.     }  

默認硬編碼的方式使得以后可維護程度大大降低。MVC 1.0 似乎沒有提供很好的基于配置文件的路由規則設置。所以只好自己實現了。直到寫這篇文章時,才找到了一個比較好的解決方案。

以下是 自定義的XML 格式

  1. <?xml version="1.0" encoding="utf-8" ?>    
  2. <MapRoutes>  
  1. <!--默認規則-->    
  2. <MapRoute name="Default" url="{controller}/{action}">    
  3.   <Params>    
  4.     <Item key="controller" default="Article"/>    
  5.     <Item key="action" default="Index"/>    
  6.   </Params>    
  7. </MapRoute>    
  8.  <!--顯示新聞列表的路由規則-->    
  9. <MapRoute name="ShowArticleList" url="{controller}/{action}/{typeId}/{pageIndex}/{pageSize}">    
  10.   <Params>    
  11.     <Item key="controller" default="Article"/>    
  12.     <Item key="action" default="Index"/>    
  13.     <Item key="typeId" default="1"/>    
  14.     <Item key="pageIndex" default="1"/>    
  15.     <Item key="pageSize" default="10"/>    
  16.   </Params>    
  17. </MapRoute>    
  18.  </MapRoutes>  

一下是全部代碼

  1.  /* ***********************************************    
  2.   * 作者 :湯曉華/tension 任何轉載請務必保留此頭部信息 版權所有 盜版必究    
  3.  * Email:tension1990@hotmail.com     
  4.  * 描述 :    
  5.  * 創建時間:2010-3-9 15:17:26    
  6.  * 修改歷史:    
  7.  * ***********************************************/   
  8.  using System;    
  9.  using System.Collections.Generic;    
  10.  using System.Linq;    
  11.  using System.Text;    
  12.  using System.Web.Routing;    
  13.  using System.Web.Mvc;    
  14.  using System.Xml.Linq;    
  15.  using Microsoft.CSharp;    
  16.  using System.CodeDom.Compiler;    
  17.  namespace Tension.Mvc    
  18.  {    
  19.      public static class RouteHelper    
  20.      {    
  21.          /// <summary>    
  22.          /// 從XML文件中注冊路由規則    
  23.          /// </summary>    
  24.          /// <param name="routes"></param>    
  25.          /// <param name="cfgFile"></param>    
  26.          public static void Register(this RouteCollection routes, string cfgFile)    
  27.          {    
  28.              IList<Route> Routes = GetRoutes(cfgFile);     
  29.              foreach (var item in Routes)    
  30.             {    
  31.                  //路由規則對象    
  32.                  object obj = CreateObjectFormString(item.ToString(), item.Name);    
  33.                  routes.MapRoute(    
  34.                         item.Name,               // Route name    
  35.                         item.Url,                // URL with parameters    
  36.                         obj                     // Parameter defaults    
  37.                     );     
  38.              }    
  39.          }    
  40.          /// <summary>    
  41.          ///  從XML文件中注冊路由規則 默認文件為網站根目錄下MapRoute.config    
  42.          /// </summary>    
  43.          /// <param name="routes"></param>    
  44.          public static void Register(this RouteCollection routes)    
  45.         {    
  46. Register(routes, string.Format("{0}\\MapRoute.config", Tension.ServerInfo.GetRootPath()));    
  47.         }      
  48.          /// <summary>    
  49.         /// 從string動態創建類對象    
  50.         /// </summary>    
  51.          /// <param name="codeString"></param>    
  52.          /// <param name="className"></param>    
  53.         /// <returns></returns>    
  54.          private static object CreateObjectFormString(string codeString, string className)    
  55.          {    
  56.              CSharpCodeProvider ccp = new CSharpCodeProvider();    
  57.              CompilerParameters param = new CompilerParameters(new string[] { "System.dll" });    
  58.              CompilerResults cr = ccp.CompileAssemblyFromSource(param, codeString);    
  59.              Type type = cr.CompiledAssembly.GetType(className);    
  60.              return type.GetConstructor(System.Type.EmptyTypes).Invoke(null);    
  61.          }    
  62.  /// <summary>    
  63. /// 從XML文件中解析路由規則    
  64. /// </summary>    
  65.  /// <param name="configFile"></param>    
  66. /// <returns></returns>    
  67. private static IList<Route> GetRoutes(string configFile)    
  68. {    
  69. StringBuilder sb = new StringBuilder();    
  70. Console.WriteLine(sb.ToString());    
  71. IList<Route> Routes = new List<Route>();    
  72. XElement xe = XElement.Load(configFile);    
  73. #region MyRegion    
  74. foreach (var item in xe.Elements("MapRoute"))    
  75.  {    
  76. 名稱屬性    
  77. XAttribute xaName = item.Attribute("name");    
  78. if (xaName == null || string.IsNullOrEmpty(xaName.Value))    
  79. {    
  80. throw new ArgumentNullException("name!說明:路由配置文件中某規則缺少name屬性或name屬性的值為空字符串");    
  81.  }    
  82. //URL屬性    
  83. XAttribute urlName = item.Attribute("url");    
  84.  if (urlName == null || string.IsNullOrEmpty(urlName.Value))    
  85. {    
  86.  throw new ArgumentNullException("url!說明:路由配置文件中某規則缺少url屬性或url屬性的值為空字符串");    
  87.   }    
  88. Dictionary<stringstring> DictParams = new Dictionary<stringstring>();    
  89.  #region MyRegion    
  90.  foreach (var pItem in item.Element("Params").Elements("Item"))    
  91.   {    
  92.  XAttribute itemKey = pItem.Attribute("key");    
  93. if (itemKey == null || string.IsNullOrEmpty(itemKey.Value))    
  94.  {    
  95. throw new ArgumentNullException("Item->key!說明:路由配置文件中某規則缺少Item->key屬性或Item->key屬性的值為空字符串");    
  96.   }    
  97.  XAttribute itemDefault = pItem.Attribute("default");    
  98. if (itemDefault == null || string.IsNullOrEmpty(itemDefault.Value))    
  99. {    
  100. throw new ArgumentNullException("Item->default!說明:路由配置文件中某規則缺少Item->default屬性或Item->default屬性的值為空字符串");    
  101.  }    
  102.  DictParams.Add(itemKey.Value, itemDefault.Value);    
  103.  }    
  104.  #endregion    
  105. Routes.Add(new Route() { Name = xaName.Value, Url = urlName.Value, Params = DictParams });    
  106. }    
  107.  #endregion    
  108.  return Routes;    
  109.     }    
  110.     }    
  111.  /// <summary>    
  112.  /// 路由規則    
  113.  /// </summary>    
  114.  public class Route    
  115.  {    
  116.  public string Name { getset; }    
  117. public string Url { getset; }    
  118. public Dictionary<stringstring> Params { getset; }    
  119.  /// <summary>    
  120. /// 重寫ToString 方法 產生需要動態代碼段    
  121. /// </summary>     
  122.  /// <returns></returns>    
  123.  public override string ToString()    
  124.  {    
  125.  StringBuilder sb = new StringBuilder();    
  126.  sb.AppendFormat("public class {0}", Name);    
  127. sb.Append("{");    
  128.  foreach (var item in Params)    
  129.  {    
  130. sb.AppendFormat("public string {0}", item.Key);    
  131. sb.Append("{get{return \"");    
  132. sb.Append(item.Value);    
  133. sb.Append("\";}} ");    
  134.   }    
  135. sb.Append("}");    
  136.  return sb.ToString();    
  137.  }    
  138.    }    
  139. }  

在實現過程中遇到的最大問題就是 參數列表的動態裝載 看一下以下代碼

  1. routes.MapRoute(   
  2. "User",                                              // Route name   
  3.  "{controller}/{action}/{id}",                           // URL with parameters   
  4. new { controller = "User", action = "Show", id = "0" }  // Parameter defaults   
  5.  );  

這是硬編碼實現的路由規則注冊

其中 第三個參數(new { controller = "User", action = "Show", id = "0" } ) 是一個匿名對象

該對象如何動態構建成了難題。(才疏學淺)

嘗試著傳入一個 Dictionary<K,T> 但是沒有用,ASP.NET 解析這個參數的時候是以反射形式讀取的對象屬性。

后來想到了使用代碼段 在運行時動態創建對象。

我們將類似代碼段

  1. public class Default{public string controller{get{return "Article";}} public str   
  2. ing action{get{return "Index";}} public string id{get{return "0";}} public strin   
  3. g page{get{return "1";}} public string size{get{return "10";}} } 

傳入方法

  1. private static object CreateObjectFormString(string codeString, string className)   
  2. {   
  3. CSharpCodeProvider ccp = new CSharpCodeProvider();   
  4. CompilerParameters param = new CompilerParameters(new string[] { "System.dll" });   
  5. CompilerResults cr = ccp.CompileAssemblyFromSource(param, codeString);   
  6. Type type = cr.CompiledAssembly.GetType(className);   
  7. return type.GetConstructor(System.Type.EmptyTypes).Invoke(null);   

即可有運行時動態的創建我們需要的參數對象。

以后就可以方便的在XML注冊路由了。

public static void Register(this RouteCollection routes)  對 RouteCollection 對象添加了擴展方法

引入對應的命名空間后就方便的注冊了。

改進后的注冊方法

  1.  public static void RegisterRoutes(RouteCollection routes)   
  2.  {   
  3.  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");   
  4.  }   
  5. protected void Application_Start()   
  6.  {   
  7. RegisterRoutes(RouteTable.Routes);   
  8.  //執行RouteCollection的擴展方法 用來注冊XML文件中的路由配置信息   
  9. RouteTable.Routes.Register();   
  10.  } 

代碼下載地址

/tandly/MvcRouteHelper.rar

原文標題:ASP.NET MVC路由規則XML化

鏈接:http://www.cnblogs.com/tandly/archive/2010/03/10/1682301.html

【編輯推薦】

  1. 專訪微軟MVP衣明志:走進ASP.NET MVC 2框架開發
  2. 詳解ASP.NET MVC 2中強類型HTML輔助方法
  3. ASP.NET MVC 2 RC版全新發布 增強HTML控制
  4. 詳解ASP.NET MVC 2自定義驗證
  5. 詳解ASP.NET MVC對表進行通用的增刪改 
     
責任編輯:彭凡 來源: 博客園
相關推薦

2009-07-31 12:43:59

ASP.NET MVC

2009-07-23 14:31:20

ASP.NET MVC

2009-07-22 15:02:02

ASP.NET MVC

2009-04-08 09:58:07

ASP.NET MVCTempData框架

2009-07-20 10:33:02

ASP.NET MVC

2009-07-22 09:11:02

Action方法ASP.NET MVC

2009-08-04 17:28:45

Apache支持ASP

2014-08-21 09:31:06

路由

2009-07-24 10:55:00

asp.net mvc

2009-07-23 15:11:43

XML Web服務方法ASP.NET

2009-07-27 15:34:11

MembershipASP.NET

2009-07-27 10:18:12

TypeResolveASP.NET

2009-08-05 18:36:12

ASP.NET Che

2009-07-24 13:41:15

ASP.NET AJA

2009-08-05 15:50:13

ASP.NET優點

2009-07-27 09:29:38

ASP.NET中Jav

2009-09-24 09:26:22

ASP.NET MVC

2009-07-24 10:53:51

ASP.NET實現靜態

2009-07-20 16:09:39

2009-11-02 10:15:53

ASP.NET MVC
點贊
收藏

51CTO技術棧公眾號

97超碰人人澡| 91亚洲精品丁香在线观看| 一本加勒比北条麻妃| 欧美黑人粗大| www.激情成人| 欧美精品成人91久久久久久久| 日韩精品人妻中文字幕有码| 97久久香蕉国产线看观看| 国产精品无人区| 97免费高清电视剧观看| 中文字幕第15页| 四季av一区二区三区免费观看| 日韩女优av电影在线观看| 黄www在线观看| 国产精品剧情一区二区在线观看| 粉嫩蜜臀av国产精品网站| 欧美整片在线观看| 希岛爱理中文字幕| 无码少妇一区二区三区| 欧美日韩高清一区| 欧美一区二区三区爽大粗免费| av网站在线播放| 不卡的av中国片| 国产精品日韩在线播放| 日本最新中文字幕| 91视频综合| 亚洲免费一级电影| 一个人看的视频www| 日韩精选视频| 亚洲成人午夜影院| 在线看视频不卡| 日色在线视频| 国产.欧美.日韩| 国产精品自产拍在线观看中文| 国产亚洲成人精品| 91一区二区| 国产小视频91| 日本黄色免费观看| 日韩成人视屏| 欧美日韩国产美| 97在线免费公开视频| 天堂va在线| 中文字幕一区二区三区在线播放 | 91精品国产乱码在线观看| 午夜精品毛片| 中文字幕免费精品一区高清| 精品少妇一区二区三区免费观| 操欧美女人视频| 日韩一区二区中文字幕| 奇米影视四色在线| 91欧美精品| 在线观看网站黄不卡| 美女av免费在线观看| 成av人片在线观看www| 亚洲激情图片qvod| 国产精品igao激情视频| av片在线观看永久免费| 国产精品久久毛片av大全日韩| 日韩av一区二区三区在线观看| 午夜视频福利在线| 91污在线观看| 久久国产主播精品| 日本一二三区在线视频| 91一区二区三区在线播放| 国产美女精品久久久| 亚洲AV无码乱码国产精品牛牛| 国产精品18久久久久久久网站| 91理论片午午论夜理片久久| 国产伦一区二区| 国产一区二区三区免费| 成人免费看黄网站| 国产色综合视频| 国产一区在线观看视频| 懂色一区二区三区av片| 日本精品久久久久| 2014亚洲片线观看视频免费| 欧美亚洲另类久久综合| 国产在线视频资源| 国产精品剧情在线亚洲| 2021国产视频| 激情国产在线| 在线视频一区二区三区| 中文av一区二区三区| 999精品视频在线观看| 日韩欧美中文字幕精品| 国产肉体xxxx裸体784大胆| 亚洲都市激情| 日韩在线激情视频| 国产精品白丝喷水在线观看| 激情久久久久久久| 欧美在线视频一区| 一级黄色大片免费| 岛国一区二区在线观看| 免费成人av网站| 毛片av在线| 亚洲午夜在线视频| 国内外免费激情视频| 91精品一久久香蕉国产线看观看| 精品国产免费一区二区三区四区| 香蕉视频黄色在线观看| 亚洲第一天堂| 欧美一级视频免费在线观看| 亚洲一卡二卡在线观看| 成人午夜av影视| 日本在线一区| 久久av色综合| 欧美无砖砖区免费| 亚洲少妇一区二区三区| 精品免费在线| 欧美国产日韩中文字幕在线| 波多野结衣小视频| 丰满放荡岳乱妇91ww| 日韩资源av在线| 日韩精品卡一| 欧美日韩的一区二区| 国产一级伦理片| 亚洲成人99| 国产a∨精品一区二区三区不卡| 国产免费无遮挡| 久久精品男人的天堂| 黄色激情在线视频| 六九午夜精品视频| 国产视频久久久久| 久久国产在线视频| 久久草av在线| 日本一区二区三区精品视频| 青草在线视频| 91精品欧美一区二区三区综合在| 欧美特黄一区二区三区| 韩国在线视频一区| 91亚洲精品一区二区| 免费成人av电影| 亚洲成精国产精品女| 在线视频观看一区二区| 精品免费视频| 国产激情综合五月久久| 香港一级纯黄大片| 亚洲国产一区视频| 一区二区三区人妻| 亚洲mv大片欧洲mv大片| 国产精品欧美风情| 黄色网址在线播放| 欧美网站在线观看| 亚洲少妇18p| 欧美色图首页| 99r国产精品视频| 国产激情在线观看| 欧美精品高清视频| 午夜黄色福利视频| 久久精品99国产精品日本| 日韩av影视| 777午夜精品电影免费看| 亚洲女人天堂网| 国产视频1区2区| 久久综合九色综合97婷婷 | 亚洲在线播放| 国产主播一区二区三区四区| 国产福利在线免费观看| 欧美tk—视频vk| 青青草原国产视频| 成人av资源网站| 日韩中字在线观看| 日韩精选在线| 国产成+人+综合+亚洲欧洲| 毛片在线能看| 欧美性生交片4| 国产精品18在线| 国内精品伊人久久久久av一坑 | 亚洲色图二区| 成人在线国产精品| 色呦呦在线观看视频| 精品美女一区二区三区| 日本免费在线播放| 91老司机福利 在线| 日本xxxxxxx免费视频| 成人免费av| 成人精品福利视频| 欧美精品videossex少妇| 亚洲精品www久久久| 欧产日产国产69| 国产精品三级电影| 污视频在线观看免费网站| 欧美日韩一区二区三区四区在线观看 | 久久婷婷一区| 亚洲一区二区三区免费观看| 日韩精品成人在线观看| 97热精品视频官网| 福利视频在线看| 欧美一级高清片| www成人在线| 欧美高清在线一区| 91人人澡人人爽| 麻豆成人在线| 国产高清免费在线| 国产一区二区三区不卡av| 国产成人精品优优av| 超碰在线最新| 亚洲免费电影一区| 国产视频aaa| 色哟哟欧美精品| 男女性高潮免费网站| 91丨porny丨国产| 看看黄色一级片| 中国女人久久久| 日本福利视频导航| 欧美精品中文字幕亚洲专区| 国产精品视频yy9099| gogo高清午夜人体在线| 中文字幕亚洲欧美在线| 熟妇高潮一区二区高潮| 欧美疯狂做受xxxx富婆| 国产成人综合欧美精品久久| 亚洲男同1069视频| 波多野吉衣中文字幕| 国产精品一区二区在线观看网站 | 黄频免费在线观看| 久久综合伊人77777尤物| 人成免费电影一二三区在线观看| 宅男噜噜噜66一区二区66| 久久国产精品免费看| 亚洲欧美另类小说| 极品人妻videosss人妻| 不卡影院免费观看| 午夜激情视频网| 日本女人一区二区三区| 欧美 日韩 激情| 欧美国内亚洲| 一区二区三区不卡在线| 国产剧情一区| 久久久精品国产一区二区三区| 久久伊人影院| 国产综合视频在线观看| 国产精品亚洲d| 51午夜精品视频| 2021中文字幕在线| 欧美美最猛性xxxxxx| 日本中文字幕在线看| 亚洲欧洲午夜一线一品| 亚洲av毛片成人精品| 欧美电影精品一区二区| 国产麻豆一精品一男同| 欧美精品一卡二卡| 91片黄在线观看喷潮| 欧美中文字幕亚洲一区二区va在线| 最新中文字幕一区| 精品国产成人av| 国产又大又黑又粗免费视频| 亚洲国产一区二区三区| 毛片a片免费观看| 亚洲免费观看高清在线观看| 午夜精品一区二区三级视频| 国产精品乱码妇女bbbb| 激情高潮到大叫狂喷水| 国产精品网曝门| 麻豆视频免费在线播放| 国产精品嫩草99a| 亚洲色图欧美色| 国产精品久久久久三级| 蜜桃av.com| 亚洲欧美综合在线精品| 欧洲猛交xxxx乱大交3| 一级中文字幕一区二区| 久久久国产精华液| 亚洲成av人片在www色猫咪| 日韩成人一区二区三区| 精品国产1区2区| 亚洲第一网站在线观看| 在线精品国精品国产尤物884a| 久久久久久av无码免费看大片| 欧美日韩激情一区二区三区| 国产男男gay体育生网站| 日韩欧美国产系列| 欧美一区二区黄片| 亚洲免费成人av电影| www 日韩| 欧美另类精品xxxx孕妇| 久久国产精品黑丝| 全球成人中文在线| 成人免费在线观看视频| 91视频九色网站| 国产精品久久久网站| 欧美日韩另类丝袜其他| 欧美在线观看视频一区| 国产卡一卡二在线| 亚洲三级毛片| 91n.com在线观看| 国产一区二三区| 老熟妇精品一区二区三区| 久久精品亚洲乱码伦伦中文| 日韩激情小视频| 婷婷六月综合网| 免费看av在线| 日韩女优制服丝袜电影| 欧美成人免费| 伦伦影院午夜日韩欧美限制| 岛国在线视频网站| 国产欧美一区二区三区四区| 成人在线tv视频| 亚洲精品视频一二三| 亚洲福利国产| 久久久久国产一区| 成人黄色777网| 99成人在线观看| 欧美日韩国产麻豆| 国产精品综合在线| 亚洲精品一区二区三区婷婷月| 麻豆系列在线观看| 热久久免费视频精品| 日韩成人在线观看视频| 日本一区二区三区视频在线播放| 欧美韩日精品| www.99av.com| 99精品国产视频| 裸体武打性艳史| 日本道免费精品一区二区三区| 亚洲av永久无码国产精品久久| 伊人久久免费视频| 久草在线中文最新视频| 91最新在线免费观看| 欧美伦理影院| 99热在线这里只有精品| 国产综合色视频| 亚洲欧美va天堂人熟伦| 午夜久久久影院| 国产绳艺sm调教室论坛| 综合欧美国产视频二区| 亚洲美女久久精品| 国产精品亚洲综合| 911久久香蕉国产线看观看| 国产免费视频传媒| 99久久久无码国产精品| 久久免费公开视频| 欧美一区永久视频免费观看| av在线电影观看| 国产成人精品优优av| 亚洲宅男网av| 国产在线精品91| 99久久99久久久精品齐齐| 久久久久成人片免费观看蜜芽| 欧美剧情片在线观看| av在线日韩国产精品| 国产精品电影观看| 亚洲+变态+欧美+另类+精品| 欧美久久久久久久久久久久久| 国产精品一二一区| 希岛爱理中文字幕| 欧美一二三在线| 视频在线观看入口黄最新永久免费国产 | 精品污污网站免费看| 成人免费在线电影| 国产精品成人国产乱一区 | 亚洲一区二区三区色| 蜜臀久久99精品久久久久宅男| 免费黄色片网站| 欧美日韩视频在线第一区| 阿v免费在线观看| 国产精品久久久久久婷婷天堂| 国产欧美一区| 国产又大又黄又粗的视频| 国产日韩av一区| 最新国产中文字幕| 色播久久人人爽人人爽人人片视av| 另类一区二区三区| 国产av第一区| 国产91色综合久久免费分享| 国产无遮挡免费视频| 亚洲国产精品成人va在线观看| 国产h片在线观看| 久久综合入口| 日韩不卡免费视频| 少妇高潮在线观看| 欧美一区二区成人| 97蜜桃久久| 欧美亚洲另类在线一区二区三区| 免费人成精品欧美精品| 小泽玛利亚一区二区免费| 欧美v日韩v国产v| 欧美亚洲日本精品| 日韩一二三区不卡在线视频| 精品在线播放午夜| 久久久久久久久艹| 日韩激情在线视频| 成人午夜一级| 日本aa在线观看| 久久女同互慰一区二区三区| 中国一级片黄色一级片黄| 久久中文字幕国产| 嫩草国产精品入口| 欧美大尺度做爰床戏| 一区二区成人在线视频| 日本私人网站在线观看| 成人av在线网址| 尤物在线精品| 超碰人人干人人| 欧美www视频| 国产亚洲精彩久久| 日本一道本久久| 日韩一区欧美一区| 污污的视频网站在线观看| 国产欧美日韩视频|