日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET MVC的路由

發布時間:2023/12/10 asp.net 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET MVC的路由 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  好久沒寫博文了,感覺最近好像少了點動力。唉!這回就看看這個MVC的路由。

  說這個路由機制其實不是MVC里面特有的,ASP.NET里面本身就有的,只不過在WebForm里面一般比較少用,而在MVC里就是把原本的路由擴展了。原本對不知道單純在ASP.NET里使用路由的詳細情況,但自從看了蔣金楠老師的幾篇文章之后知曉了,不過這篇還是講MVC的路由而已。

  路由的定義是位于根目錄下的全局文件Global.asax.cs。里面有個RegisterRoutes方法

1 public static void RegisterRoutes(RouteCollection routes) 2 { 3 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 4 5 routes.MapRoute( 6 "Default", // Route name 7 "{controller}/{action}/{id}", // URL with parameters 8 new { controller = "System", action = "TestPage", id = UrlParameter.Optional } // Parameter defaults 9 ); 10 }

這里有兩部分,一部分是

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

這個是用于忽略路由的,按上面的情況,則是不對asd文件經行路由,可以直接去訪問。

1 routes.MapRoute( 2 "Default", // Route name 3 "{controller}/{action}/{id}", // URL with parameters 4 new { controller = "System", action = "TestPage", id = UrlParameter.Optional } // Parameter defaults 5 );

?

這個是定義路由的。根據上面的注釋,可以看出第一個參數是定義了路由的名稱;第二個則是URL的參數;第三個則是URL參數的默認值。除此外還可以對URL的參數進行某些約束,設置命名空間等。關于MapRoute的其他重載如下

1 public static Route MapRoute(this RouteCollection routes, string name, string url); 2 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults); 3 public static Route MapRoute(this RouteCollection routes, string name, string url, string[] namespaces); 4 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints); 5 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, string[] namespaces); 6 public static Route MapRoute(this RouteCollection routes, string name, string url, object defaults, object constraints, string[] namespaces);

?

另外,各個路由的名稱一定要唯一的,不能重復。

  URL參數中{Controller}和{action}是兩個比較特殊的占位符,分別代表著請求對應的控制器和行為方法。在后面跟著的參數則是傳到行為方法里面的參數,在這里聲明的是{id},方法的參數名一定是id才能獲取到參數,否則傳到方法里面的參數值是null。如果在參數名前面帶一個星號(*),如{*id},這樣就會匹配URL后面所有的剩余的參數。

  對于上面這個路由的定義,接收到以下請求時,參數的匹配如下

請求URL

參數

備注

http://localhost:1345/System/TestPage

Controller=System Action=TestPage

調用SystemController下的TestPage方法

http://localhost:1345/Customer/Login

Controller=Customer Action=Login

調用CustomerController下的Login方法,id參數為空

http://localhost:1345/Customer/Login/1

Controller=Customer Action=Login Id=1

調用CustomerController下的Login方法,id參數為1

http://localhost:1345

Controller=null Action=null

默認調用SystemController下的TestPage方法

http://localhost:1345/System

Controller=System Action=null

訪問SystemController,默認調用TestPage方法

  在這里另外推薦一個好東西專門用于測試路由的好東西,RouteDebug,這個需要額外引用一個dll,叫RouteDebug.dll(可在網上找一下),然后在全局文件Global.asax.cs里面的Application_Start()方法里加多一行代碼

RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes);

?

打開瀏覽器輸入相應的URL,則會出現一下頁面

  從這個頁面可以知道當前的URL跟那個路由匹配了,還有與當前路由列表中其他路由的匹配情況。除此之外,能獲取到當前請求的URL,匹配的各個參數,還有各個路由在路由集合的順序等等。

在這個例子中我還定義了另一個路由

1 routes.MapRoute( 2 "MyRoute1", 3 "Customer/{action}/{id}", 4 new { controller = "Customer", action = "Login", id = -1 });

?

  從上面路由集合的順序可以看出,這個路由的順序要比默認路由{Controller}/{action}/{*id}有前。如果這個路由放在默認路由前面,則這個MyRoute1路由則起不了作用,可以用“~/Customer”測試。

轉載于:https://www.cnblogs.com/HopeGi/p/3168556.html

總結

以上是生活随笔為你收集整理的ASP.NET MVC的路由的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。