您的位置:首页 > 编程语言 > ASP

ASP.NET MVC 之URL路由

2012-07-10 11:14 411 查看
1、概述:

  URL路由(URL Routing),指的是在基于ASP.NET 3.5 MVC的网站中,URL不再是文件目录中的一个文件,而是一个说明有关URL路由的字符串,开发者可以自行定义该字符串的格式,方便使用者理解相关页面的功能。

  在URL路由中,首先需要定义URL路由,该URL路由通过占位符定义URL的模式,URL路由将用户请求的URL路由解析为一系列的离散值。例如:对于一个URL请求http://server/application/products/show来说,URL路由将解析后的离散值products,show值发送到相关的处理程序,而对于传统的ASP.NET应用程序来说,/products/show部分只不过是一个文件的部分路径而已。

  URL路由是与ASP.NET 3.5 MVC框架独立的一个功能,也就是说,开发者可以在传统的ASP.NET应用程序中使用URL路由。(system.web.routing)

2、定义URL路由(设置URL模式):

  在URL路由中,通过大括号{}定义占位符,这些占位符就是URL路由参数,而字符串中的“/”、"."等符号则作为分隔符为URL路由解析这些离散的数据,对于不在小括号或者方括号中的信息则被视为一个常量。

有效的URL路由定义匹配的URL例子
{controler}/{Action}/{id}/Products/show/beverages
{table}/Details.aspx/Products/Details.aspx
blog/{Action}/{entry}/blog/show/123
{reportype}/{year}/{month}/{day}/sales/2008/1/5
第1行定义了含有3个URL路由参数的URL路由,此时Products就是控制器的名称,show就是该控制器中所定义的一个方法,而beverages则是一个id变量;

第2行定义中,products是一个数据表名称,而details.aspx则是一个常量;

第3行定义了含有2个URL路由参数的URL路由,此时blog是一个常量,show是相关控制器中所定义的一个方法,而123则是一个entry变量;

第4行定义个含有4个URL路由参数的URL路由,此时sales是一个reportype变量,2008是一个year变量,1是一个month变量,5则是一个day变量。

  在程序中,开发者一般通过Grobal.asax文件,在Application_Start()方法中设置上述URL路由的定义。

  protected void Application_Start(object sender, EventArgs e)

  {

    RegisterRoutes(RouteTable.Routes);
  }  

  public static void RegisterRoutes(RouteCollection routes)
  {

    routes.Add(new Route

      (
      "Category/{Action}/{categoryName}",
      new CategoryRouteHandler()
     );

  }

3、设定URL路由参数的默认值

  {  protected void Application_Start(object sender, EventArgs e)

    RegisterRoutes(RouteTable.Routes);
  }  

  public static void RegisterRoutes(RouteCollection routes)
  {

    routes.Add(new Route

      (
      "Category/{Action}/{categoryName}",
      new CategoryRouteHandler()
     )

      {

        Defaults=new RouteValueDictionary

          {{"categoryName","food"},{"Action","show"}}

      }

  }

在上述代码中,创建了所定义URL路由参数的默认值,即categryName变量的默认值为food,而Action方法则是对应控制器中的show()方法。

URL参数值
/CategoryAction="show",categoryName="food"
/Category/addAction="add",categoryName="food"
/Category/add/beveragesAction="add",categoryName="beverages"
第1行中被请求的URL中没有包含任何URL路由参数,因此URL路由将使用设定的默认值,此时categoryName变量的默认值是food,而Action方法则是对应控制器中的show()方法;

第2行中北请求的URL中包含一个URL路由参数,因此URL路由解析该URL后,此时categoryName变量的默认是food,而Action方法则是对应控制器中的Add()方法;

第3行中被请求的URL中包含完整的URL路由参数,因此URL路由解析该URL后,此时categoryName变量的默认值是beverages,而Action方法则是对应控制器中的Add()方法。

4、MVC 中URL的使用

  在通过ASP.NET MVC项目模板建立的一个基本MVC网站中,在Global.asax文件中就已经设定好了默认的URL路由,以便开发者即刻运行所建立的MVC网站。

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
"Default", // 路由名称
"{controller}/{action}/{id}", // 带有参数的 URL
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值
);

}

protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();

RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}

5、URL路由的映射

  当一个URL被请求时,ASP.NET MVC框架首先使用UrlRoutingModule模块来解析该URL地址,然后通过MvcHandler对象,选择相关的控制器及控制器中的相关方法来处理用户的请求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: