MVC中的Routing

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參數actioncategoryName的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/

相關文章
相關標籤/搜索