zoukankan      html  css  js  c++  java
  • ASP.NET 3.5路由总结篇

    URL Routing是非常重要的一块技术体系,笔者将URL Routing的知识进行梳理后得出本文,旨在同大家分享,希望能够起到抛砖引玉的作用。

    1.    什么是URL Routing

    所谓URL RoutingURL路由),指的是在Web中,URL不再是文件目录中的一个文件,而是一个说明有关URL路由的字符串,开发者可以自定义该字符串的格式。

    2.    为什么要使用URL Routing

    主要目的:URL更加的友好,方便web使用者理解相关页面的功能。至于其它目的嘛,这个就太广了,甚至可以在使用中慢慢挖掘它的用处。

    3.    URL RoutingMVC才有的吗?

    URL Routing的程序集System.Web.Routing位于.NET框架3.5SP1版本中,是与ASP.NET MVC框架分离的,因此,在WebForm项目中也可以使用路由。

    4.    如何在WebForm中使用路由?

    要在WebForm中使用路由,只需要完成4个步骤即可:

    Ø 添加对System.Web.Routing的引用;

    Ø 创建一个实现IRouteHandler接口的类,如WebFormRouteHandler类;

    Ø Global.asax.cs中将我们创建的RouteHandler进行全局应用配置;

    Ø Web.config中配置System.Web.Routing的引用

    using System.Web;
    using System.Web.Routing;
    using System.Web.Compilation;
    using System.Web.UI;

    namespace RoutingInWebForm
    {
        
    public class WebFormRouteHandler:IRouteHandler
        {
            
    public string VirtualPath{ get;private set; }

            
    public WebFormRouteHandler(string virtualPath)
            {
                
    this.VirtualPath = virtualPath;
            }

            
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
            {
                var page 
    = BuildManager.CreateInstanceFromVirtualPath(VirtualPath, typeof(Page)) as IHttpHandler;
                
    return page;
            }
        }
    }
    using System;
    using System.Web.Routing;

    namespace RoutingInWebForm
    {
        
    public class Global : System.Web.HttpApplication
        {
            
    protected void Application_Start(object sender, EventArgs e)
            {
                RegisterRoutes(RouteTable.Routes);
            }

            
    public static void RegisterRoutes(RouteCollection routes)
            {
                routes.Add(
    "Named"new Route("foo/bar"new WebFormRouteHandler("~/WebForm1.aspx")));
                routes.Add(
    "Number"new Route("one/two/three"new WebFormRouteHandler("~/WebForm2.aspx")));
            }
        }
    }
    复制代码

    Web.config中配置System.Web.Routing的引用的代码如下:

    <httpModules>
          
    <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
    </httpModules>
    复制代码

    在WebForm中使用路由代码下载

    5.    如何定义URL Routing

    开发者一般通过Global.asax.cs文件,在Application_Start()中设置路由定义,通过静态类RouteTable的属性Routes来设置URL路由,关于URL Routing的定义,是比较灵活的。

    6.    如何设定URL Routing的参数默认值?

    当你定义一个路由时,你可以把一个缺省的值赋给一个参数。如果URL中没有提供此参数值,那么将使用此缺省值。你可以为一个路由设置缺省值,这可以通过把一个字典赋值给Route类的Defaults属性来实现。下列示例给出了一个带有缺省值的路由。

    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路由处理一个URL请求时,本例中所定义的路由将产生如下列表格所示的结果。

    URL

    参数值

    /Category

    action = "show"

    categoryName = "food"

    /Category/add

    action = "add"

    categoryName = "food"

    /Category/add/beverages

    action = "add"

    categoryName= "beverages"

    7.    如何为URL Routing添加约束?

    当你把路由定义添加到路由集合时,你可以添加约束条件。下面的示例添加的约束用于限制在locale和year参数中应该包括什么样的值。


    void Application_Start(object sender, EventArgs e)
    {
       RegisterRoutes(RouteTable.Routes);
    }
     
    public static void RegisterRoutes(RouteCollection routes)
    {
       routes.Add(
    new Route
       (
         
    "{locale}/{year}"
            , 
    new ReportRouteHandler()
       )
          {
             Constraints 
    = new RouteValueDictionary
             {{
    "locale""{a-z}{2}-{A-Z}{2}"},{year, @"d{4}"}}
          });
    }

    8.    Routing的扩展方法

     

    扩展方法的由来:路由程序集(System.Web.Routing)是在2008811日更新的.NET 3.5框架SP1版本中发布的,而ASP.NET 3.5 MVC 1.0版本是在2009318日才正式发布。在ASP.NET MVC版本的不断改进中,微软的开发团队感觉到以往的路由设置给开发者带来不便,但是路由的程序集已经发布,所以将扩展方法加在了System.Web.Mvc程序集的RouteCollectionExtemsion类中。

    关于Routing的扩展方法的UML及重载方法如下图所示:


    9.    如何自定义路由约束?

    要实现自定义路由约束,实际上非常的简单,只需要实现IRouteConstraint接口中的Match()方法即可。

    10.    如何优化路由设置?

    Ø 将最常用的路由存放在路由表的最前面

    Ø View中指定路由的名称。这样,就不会寻找其它匹配的路由。

    11.    路由解析的工作机制分析

    路由解析是按照一定的管道进行的,路由解析的管道图如下所示:

  • 相关阅读:
    Python—re模块
    Python—json模块
    Python—sys模块介绍
    Python—os模块介绍
    Python—randonm模块介绍
    Python—time模块介绍
    Python—包介绍
    Python—模块介绍
    Python—装饰器
    jvm、jre、jdk
  • 原文地址:https://www.cnblogs.com/gjhjoy/p/3490226.html
Copyright © 2011-2022 走看看