Fire my passion

Anything with my most passion……
那就来说说ASP.NET MVC中的Routing吧

基本上,之前已经把MVC简要的学了一遍。现在就来深入看一下各个模块了。

ASP.NET MVC中的Routing是单独的一个模块,在整个ASP.NET架构中起到了很大的作用,而且应用越来越广泛。MVC就是其中之一。现在我们做的网站也好,应用程序也好,都是基于WebForm的。所以一般来说URL就反映了整个网站的结构。然后所有的参数传递一般就是通过QueryString或者Session,因为后者需要消耗服务器内存,如果不及时dispose的话,会给以后带来不少的麻烦,比如数据过期等等。结果就是Url的长度越来越大,让用户很难通过URL来知道现在究竟是在做什么,连接的意思代表什么。现在有了这个Routing,也就解决了这个问题。(其实,在Routing出现之前也有不少针对这个问题的的结局方案,比如之前的UrlRewriting什么的,关于比较他们的优缺点,就放在后面的日子里再去深入研究了。)

要构造一个好的Routing是需要去分析系统要呈现给用户的功能的。然后,在总结好应用程序功能的基础上,再加上一些原则,就可以构建出来了。

既然说到了构造Routing的原则,那我就把我的想法总结一下:

  1. 尽量保持URL短小精悍,如果最后构造出来的Url比WebForm时期还要冗长,那还不如不搞。
  2. 让用户通过Url就可以看出现在浏览的或者操作的意图,即让Url能够保持自我解释。
  3. 尽量不要把一些重要的ID显示在Url里面,尤其是那些整型变量的主键
  4. 还有呢,就是避免出现空格。这个是对搜索引擎的优化,更好的让你的Url出现在搜索引擎中。 

在我们用VS的模板创建一个MVC网站后,在Globle.asax.cs文件里会有这么几行代码:

public class MvcApplication : System.Web.HttpApplication
    {
        
public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute(
"{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                
"Default",                                              // Route name
                "{controller}/{action}/{id}",                           // URL with parameters
                new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
            );
        }

        
protected void Application_Start()
        {
            RegisterRoutes(RouteTable.Routes);
        }
    }

简要说一下。RouteTable.Routes是一个静态的RouteCollection类型对象,负责收集注册的Route。然后,在RegisterRoutes方法中,IgnoreRoute和MapRoute都是扩展方法。第一个是注册忽略的路径,后面那个是注册将要处理的路径。

在这里需要说明的是,注册Route的顺序决定了Route生效的优先级。越先注册优先级就越高。所以,应该把复杂的匹配模式放在前面,比较笼统的放在后面。

总而言之,Routing是MVC的入口,把它的原理掌握了有助于以后扩展我们的程序能更加顺手。

posted on 2009-10-23 15:54  everx  阅读(239)  评论(0编辑  收藏  举报