• ASP.NET MVC 之URL路由


    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 参数值
    /Category Action="show",categoryName="food"
    /Category/add Action="add",categoryName="food"
    /Category/add/beverages Action="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对象,选择相关的控制器及控制器中的相关方法来处理用户的请求。

  • 相关阅读:
    JS计算字符串长度(兼容后端PHP)
    使用iview-admin2构建的项目,热更新无法启动
    关于HSTS的总结
    (转)javascript兼容问题总结
    js写一个通讯录
    HTML5+通讯录获取指定多个人的信息
    MUI封装的选择器调用
    心得小细节(一)
    读后感(一) web运作原理探析
    码农和软件开发工程师
  • 原文地址:https://www.cnblogs.com/zhanghaomars/p/2584286.html
Copyright © 2020-2023  润新知