Routing正則表達式
ASP.NET Routing模塊的責任是將傳入的瀏覽器請求映射爲特有的MVC controller actions。瀏覽器
public static void RegisterRoutes(RouteCollection routes) { //忽略對.axd文件的Route,也就是和WebForm同樣直接去訪問.axd文件 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Category", // Route 的名稱 "Category/{action}/{categoryName}",// 帶有參數的URL new { controller = "Category", action = "Index", categoryName = "4mvc" }// 設置默認的參數 ); } protected void Application_Start() { //在程序啓動的時候註冊咱們前面定義的Route規則 RegisterRoutes(RouteTable.Routes); }
添加一個包含兩個URL參數action和categoryName的Route對象 mvc
一般,咱們在Global.asax文件中的Application_Start事件中添加routes,這確保routes在程序啓動的時候就可用,並且也容許在你進行單元測試的時候直接調用該方法。若是你想在單元測試的時候直接調用它,註冊該routes的方法必需是靜態的同時有一個RouteCollection參數。單元測試
//忽略對.axd文件的Route,也就是和WebForm同樣直接去訪問.axd文件
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
添加約束條件,支持正則表達式。例如咱們須要對id參數添加一個必須爲數字的條件:測試
routes.MapRoute( "Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = "" }, new { id = @"[\d]*" } //id必須爲數字,使用星號(*)匹配不肯定個數的參數,這會匹配URL後面全部的剩餘的參數 );
Controller中的Action方法中有個return View()的方法。默認狀況下它會返回與Action同名的view.在ASP.NET MVC默認的視圖引擎(WebFormViewEngine)下,view是按以下路徑訪問的:url
/Views/{Controller}/{Action}.aspxspa
也就是說對於http://localhost:2176/Home/Index這個路徑,在默認狀況下,在Index這個Action中用return View()來返回view的時候,會去尋找/Views/Home/Index.aspx文件,若是找不到這個文件,就會去Share目錄中尋找:/Views/Share/Index.aspx,若是都找不到,就會拋出找不到View的異常。return View("Default.aspx")來指定要返回哪個view:/Views/Home/Default.aspx。code
若是url爲query/{queryname}/{*queryvalues} orm
對於url:query/aspnetmvc/preview5/routing ,則queryvalues參數匹配的參數爲 preview5/routing對象
下面是一些示例URL:
Valid route definitions |
Examples of matching URL |
|
{controller}/{action}/{id} |
/Products/show/beverages |
|
{table}/Details.aspx |
/Products/Details.aspx |
|
blog/{action}/{entry} |
/blog/show/123 |
|
{reporttype}/{year}/{month}/{day} |
/sales/2008/1/5 |
url匹配Route是根據Route的定義順序來自上而下匹配的,因此URL永遠都匹配不了第二個Route。因此,在定義Route的時候,要將一些特別的Route放到前面
最後感謝原文做者:QLeelulu的文章http://QLeelulu.cnblogs.com/