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

    主站蜘蛛池模板: 亚洲欧洲国产综合AV无码久久| 国产成人综合精品| 久久久久青草大香线综合精品| 国产精品综合久成人| 伊人亚洲综合青草青草久热| 伊人一伊人色综合网| 五月天婷五月天综合网站| 色欲老女人人妻综合网| 国产综合亚洲专区在线| 色综合久久一本首久久| 亚洲啪啪综合AV一区| 色综合天天综合高清网| 久久综合狠狠综合久久综合88| 香蕉综合在线视频91| 亚洲综合色丁香婷婷六月图片| 亚洲 自拍 另类小说综合图区| 色婷婷五月综合欧美图片| 久久综合久久综合九色| 色噜噜狠狠色综合久| 亚洲综合无码一区二区痴汉| 一本色道久久88亚洲综合 | 亚洲日韩久久综合中文字幕| 狠狠久久综合伊人不卡| 色综合91久久精品中文字幕| 久久综合九色综合97伊人麻豆| 狠狠色丁香久久婷婷综合| 久久综合久久鬼色| 狠狠综合久久综合中文88| 色综合视频一区二区三区| 色视频综合无码一区二区三区| 热综合一本伊人久久精品| 区三区激情福利综合中文字幕在线一区 | 色综合久久一本首久久| 天天久久综合网站| 天天做天天爱天天爽综合网 | 中文字幕人成无码人妻综合社区| 欧洲97色综合成人网| 狠狠综合久久av一区二区| 色偷偷91综合久久噜噜噜男男| 久久综合鬼色88久久精品综合自在自线噜噜| 鲁一鲁一鲁一鲁一曰综合网|