RouteCollectionExtensions.MapRoute 方法 (ASP.NET設置路由)


重載列表


  名稱 說明
公共方法靜態成員 MapRoute(RouteCollection, String, String) 映射指定的 URL 路由。
公共方法靜態成員 MapRoute(RouteCollection, String, String, Object) 映射指定的 URL 路由並設置默認路由值。
公共方法靜態成員 MapRoute(RouteCollection, String, String, String[]) 映射指定的 URL 路由並設置命名空間。
公共方法靜態成員 MapRoute(RouteCollection, String, String, Object, Object) 映射指定的 URL 路由並設置默認路由值和約束。
公共方法靜態成員 MapRoute(RouteCollection, String, String, Object, String[]) 映射指定的 URL 路由並設置默認的路由值和命名空間。
公共方法靜態成員 MapRoute(RouteCollection, String, String, Object, Object, String[]) 映射指定的 URL 路由並設置默認的路由值、約束和命名空間。
public static Route MapRoute(
	this RouteCollection routes,
	string name,
	string url,
	Object defaults,
	Object constraints,
	string[] namespaces
)

參數

routes
類型: System.Web.Routing.RouteCollection
應用程序的路由的集合。
name
類型: System.String
要映射的路由的名稱。
url
類型: System.String
路由的 URL 模式。
defaults
類型: System.Object
一個包含默認路由值的對象。
constraints
類型: System.Object
一組表達式,用於指定 url 參數的值。
namespaces
類型: System.String []
應用程序的命名空間集合。

返回值

類型: System.Web.Routing.Route
對映射路由的引用。

使用說明

在 Visual Basic 和 C# 中,可以在 RouteCollection 類型的任何對象上將此方法作為實例方法來調用。當使用實例方法語法調用此方法時,請省略第一個參數。

當創建好一個mvc應用后,應用已經被配置好可以用asp.net routing了。ASP.NET MVC路由在兩個地方被激發。

一、asp.net routing在web.config中被激活,有關route的配置有四個配置節:system.web.httpModules , system.web.httpHandlers , system.webserver.modules, the system.webserver.handlers,刪除這些配置節時要小心,因為沒有它們routing將不再工作。

二、更重要的是,在global.asax文件中已經創建了路由表,global.asax是一個包含了asp.net應用生命周期內事件句柄的特殊文件。路由表在Application Start 事件中被創建。

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Routing;
  7. namespace MvcApplication1
  8. {
  9. publicclass MvcApplication : System.Web.HttpApplication
  10. {     //使ASP.NET有實例化MvcHandler的能力
  11. publicstaticvoid RegisterRoutes(RouteCollection routes)  
  12. {      //使路由系統忽略處理ASP.NET的Web資源文件(WebResource.axd或  ScriptResource.axd).
  13. routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  14.               //對RouteCollection添加的擴展方法    
  15. routes.MapRoute(        
  16. "Default",
  17. "{controller}/{action}/{id}",
  18. new { controller = "Home", action = "Index", id = "" }
  19. );
  20. }
  21. protectedvoid Application_Start()
  22. {
  23. RegisterRoutes(RouteTable.Routes);
  24. }
  25. }
  26. }

當程序運行后,Application_Start() 方法被調用,同時調用方法內的RegisterRoutes() 方法。這個方法創建了路由表。

默認的ASP.NET MVC路由表中只含有一個叫做default的路由。這個默認路由把url拆分成三個部分分別對應controller,action和View。

當請求URL:/Home/Index/3時,下列代碼執行:HomeController.Index(3)。

如果不指定controller,則默認為Home,不指定Action則默認為Index,不指定參數則默認為空。

我們將通過例子來看一下到底默認路由是怎么把URl映射到controller和action的。想象我們在地址欄中輸入了如下URL:/Home

由於默認action為Index,所以下面的方法被調用

  1. using System.Web.Mvc;
  2. namespace MvcApplication1.Controllers
  3. {
  4. [HandleError]
  5. publicclass HomeController : Controller
  6. {
  7. public ActionResult Index(string id)
  8. {
  9. return View();
  10. }
  11. }
  12. }

這個方法接受一個字符串類型的id參數,上面的URL執行了這個方法,傳入一個空的id。

由於mvc框架引用controller actions的方式,/Home同時也會觸發下列事件

  1. using System.Web.Mvc;
  2. namespace MvcApplication1.Controllers
  3. {
  4. [HandleError]
  5. publicclass HomeController : Controller
  6. {
  7. public ActionResult Index()
  8. {
  9. return View();
  10. }
  11. }
  12. }

這個方法不接受參數,/Home將觸發這個Index(),同時/Home/Index/3也會調用這個方法,id參數將被忽略。

/Home也會與下面的方法匹配

  1. using System.Web.Mvc;
  2. namespace MvcApplication1.Controllers
  3. {
  4. [HandleError]
  5. publicclass HomeController : Controller
  6. {
  7. public ActionResult Index(int? id)
  8. {
  9. return View();
  10. }
  11. }
  12. }

該方法接受一個int類型的參數id,因為這個參數可以為null,該方法將被調用而不會產生任何錯誤。

最后調用下面的方法,這里會引發一個異常

  1. using System.Web.Mvc;
  2. namespace MvcApplication1.Controllers
  3. {
  4. [HandleError]
  5. publicclass HomeController : Controller
  6. {
  7. public ActionResult Index(int id)
  8. {
  9. return View();
  10. }
  11. }
  12. }

因為這個參數是不可以為null的。

MapRoute方法

public static Route MapRoute(
this RouteCollection routes,
string name,
string url,
Object defaults,
Object constraints,
string[] namespaces
)

name:路由在路由列表里的唯一名字(兩次MapRoute時name不能重復)

url:路由匹配的url格式

defaults:路由url {占位符} 的默認值

constraints:url的 {占位符} 的約束

namespaces:這個是用於設置路由搜索的控制器命名空間!

例:

 routes.MapRoute(

        "constraints" , //name
       "{controller}/{action}" , //url
       null , //defaults
       new {
 
                controller = @"[a-z]{4,}" , //controller必須為英文字符,最少長度為4
 
                action = @"[a-z]{4,}" //action必須為英文字符,最少長度為4
 
        }, //constraints
        null //namespaces
);
 

建立有Area時路由的注冊情況:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM