1. <bdo id="8zfej"></bdo>
    <li id="8zfej"><meter id="8zfej"><th id="8zfej"></th></meter></li>

    南京北大青鳥

    全國(guó)咨詢電話:15195455103

    三分鐘了解北大青鳥
    當(dāng)前位置:南京北大青鳥 > 學(xué)習(xí)園地 > 編程技巧

    ASP-NET MVC-2

    來源:南京北大青鳥張府園校區(qū)? ? ? 作者:IT教育 ? ??

    在一個(gè)route中,通過在大括號(hào)中放一個(gè)占位符來定義( { and } )。當(dāng)解析URL的時(shí)候,符號(hào)"/"和"."被作為一個(gè)定義符來解析,而定義符之間的值則匹配到占位符中。route定義中不在大括號(hào)中的

    ASP.NET MVC 入門3、Routing
    本系列文章基于Microsoft ASP.NET MVC Beta.
    在一個(gè)route中,通過在大括號(hào)中放一個(gè)占位符來定義( { and } )。當(dāng)解析URL的時(shí)候,符號(hào)"/"和"."被作為一個(gè)定義符來解析,而定義符之間的值則匹配到占位符中。route定義中不在大括號(hào)中的信息則作為常量值。下面是一些示例URL:
    Valid route definitions Examples of matching URL:

    北大青鳥軟件學(xué)校職業(yè)教育

    {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
     通常,我們?cè)贕lobal.asax文件中的Application_Start事件中添加routes,這確保routes在程序啟動(dòng)的時(shí)候就可用,而且也允許在你進(jìn)行單元測(cè)試的時(shí)候直接調(diào)用該方法。如果你想在單元測(cè)試的時(shí)候直接調(diào)用它,注冊(cè)該routes的方法必需是靜態(tài)的同時(shí)有一個(gè)RouteCollection參數(shù)。下面的示例是Global.asax中的代碼,演示了添加一個(gè)包含兩個(gè)URL參數(shù)action 和 categoryName的Route對(duì)象:

    public static void RegisterRoutes(RouteCollection routes){    //忽略對(duì).axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     routes.MapRoute(        "Category",                                              // Route 的名稱        "Category/{action}/{categoryName}",                           // 帶有參數(shù)的URL        new { controller = "Category", action = "Index", categoryName = "4mvc" }  // 設(shè)置默認(rèn)的參數(shù)    ); } protected void Application_Start(){    //在程序啟動(dòng)的時(shí)候注冊(cè)我們前面定義的Route規(guī)則    RegisterRoutes(RouteTable.Routes);}

    更多文章請(qǐng)參考:
    ?  System.Web.Routing入門及進(jìn)階 下篇 By 重典
    ?  System.Web.Routing入門及進(jìn)階 上篇 By 重典
    ?  ASP.NET MVC URL Routing 學(xué)習(xí) By Q.Lee.lulu
    ?  ASP.NET Routing (官方文檔)
    在這里我不打算再詳細(xì)去講解。以下只是簡(jiǎn)單的說明一下。
    忽略對(duì)某類URL的Routing:
     
        //忽略對(duì).axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     
    添加約束條件,支持正則表達(dá)式。例如我們需要對(duì)id參數(shù)添加一個(gè)必須為數(shù)字的條件:
    routes.MapRoute(    "Default",                                                  "{controller}/{action}/{id}",                               new { controller = "Home", action = "Index", id = "" },      new { id = @"[d]*" } //id必須為數(shù)字); 
     
    使用星號(hào)(*)匹配不確定個(gè)數(shù)的參數(shù),這會(huì)匹配URL后面所有的剩余的參數(shù)。例如:
    query/{queryname}/{*queryvalues}
    對(duì)于url:query/aspnetmvc/preview5/routing ,則queryvalues參數(shù)匹配的參數(shù)為 preview5/routing。
    url匹配Route是根據(jù)Route的定義順序來自上而下匹配的。例如我們定義兩個(gè)Route:

    public static void RegisterRoutes(RouteCollection routes){    routes.MapRoute(        "Default",                                              // Route 的名稱        "{controller}/{action}/{id}",                           // 帶有參數(shù)的URL        new { controller = "Home", action = "Index", id = "" }  // 設(shè)置默認(rèn)的參數(shù)    );    routes.MapRoute(        "Post",        "Post/{id}",        new { controller = "Post", action = "Index", id = "" }    );} 

    不知你看出上面定義的兩個(gè)Route有什么問題沒有?我想你看出來了,URL永遠(yuǎn)都匹配不了第二個(gè)Route,也就是名為Post的Route,因?yàn)槟芷ヅ涞诙€(gè)Route的url一樣也能匹配第一個(gè)Route,而url匹配Route是根據(jù)Route的定義順序來自上而下匹配的,所以URL永遠(yuǎn)都匹配不了第二個(gè)Route。所以,在定義Route的時(shí)候,要將一些特別的Route放到前面。
    如果你要將ASP.NET MVC部署到IIS6下面,由于IIS6對(duì)于http://blog.51mvc.com/index這類沒有擴(kuò)展名的URL是不會(huì)交由ASP.NET的aspnet_isapi.dll處理的,所以你的ASP.NET MVC程序部署到IIS6的時(shí)候可能會(huì)出現(xiàn)404錯(cuò)誤。你可以為你的ASP.NET MVC站點(diǎn)添加一個(gè)通配符:
     

    北大青鳥軟件學(xué)校職業(yè)教育

    然后點(diǎn)擊"通配符應(yīng)用程序映射"下的"插入"按鈕,在彈出的對(duì)話框中如下設(shè)置:

    北大青鳥軟件學(xué)校職業(yè)教育

    你如果擔(dān)心添加通配符會(huì)給出現(xiàn)性能上的問題,那么你可以修改Route為帶擴(kuò)展名的,這個(gè)擴(kuò)展名是完全由你自己定義的,例如我們使用4mvc來做url的擴(kuò)展名:
    routes.MapRoute(    "Default",                                              // Route 的名稱    "{controller}.4mvc/{action}/{id}",                           // 帶有參數(shù)的URL    new { controller = "Home", action = "Index", id = "" }  // 設(shè)置默認(rèn)的參數(shù)); 
     
    然后再在IIS6中添加這個(gè)擴(kuò)展名的映射:

    北大青鳥軟件學(xué)校職業(yè)教育

    然后我們?cè)L問的URL類似于:http://blog.51mvc.com/Home.4mvc/index
    群上有些朋友說希望教程能根據(jù)一個(gè)示例程序來寫,那樣更容易他們的學(xué)習(xí)。所以這里就寫一個(gè)Blog的示例程序,為了方便,Model就直接使用Blogengine的業(yè)務(wù)實(shí)體部分。在這里我們先定義這個(gè)blog的Route:
    BlogRoutepublic static void RegisterRoutes(RouteCollection routes){    //忽略對(duì).axd文件的Route,也就是和WebForm一樣直接去訪問.axd文件    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");     routes.MapRoute(        "Admin",        "Admin/{action}",        new { controller = "Admin", action = "Index" }    );     routes.MapRoute(        "PostById",        "Post/{id}",        new { controller = "Home", action = "Post", id = "" },        new { id = @"[d]+" }    );     routes.MapRoute(        "PostBySlug",        "Post/{slug}",        new { controller = "Home", action = "Post" }    );     routes.MapRoute(        "Default",                                              // Route 的名稱        "{controller}/{action}/{id}",                           // 帶有參數(shù)的URL        new { controller = "Home", action = "Index", id = "" }  // 設(shè)置默認(rèn)的參數(shù)    ); } 
     


    分享到:
    近期文章

    搶試聽名額

    名額僅剩66名

    教育改變生活

    WE CHANGE LIVES

    主站蜘蛛池模板: 亚洲综合色区中文字幕| 亚洲综合男人的天堂色婷婷| 亚洲欧美国产国产综合一区| 色综合久久久无码中文字幕波多| 色欲综合久久躁天天躁| 色噜噜狠狠色综合网| 婷婷五月六月激情综合色中文字幕| 久久青青草原综合伊人| 激情综合丝袜美女一区二区| 亚洲国产综合在线| 人人狠狠综合久久亚洲88| 国产成人久久精品77777综合| 综合久久一区二区三区 | 久久综合88熟人妻| 伊人色综合久久天天人守人婷 | 国产综合久久久久| 亚洲熟女综合色一区二区三区| 伊人久久大香线蕉综合影| 热综合一本伊人久久精品| 色综合综合色综合色综合| 99久久综合狠狠综合久久aⅴ| 丁香色欲久久久久久综合网| 一本综合久久国产二区| 综合偷自拍亚洲乱中文字幕| 色偷偷91久久综合噜噜噜| 国产成人综合久久| 九九综合VA免费看| 91精品国产综合久久婷婷 | 亚洲高清无码综合性爱视频| 伊人情人综合成人久久网小说| 亚洲五月丁香综合视频| 亚洲人成网站999久久久综合| 亚洲日本国产综合高清| 色综合天天综合网站中国| 亚洲综合无码一区二区痴汉| 久久天堂av综合色无码专区| 九月婷婷综合婷婷| 亚洲伊人精品综合在合线| 丁香婷婷亚洲六月综合色| 久久婷婷成人综合色综合| 99热婷婷国产精品综合|