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时路由的注册情况:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值