惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
B
Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Microsoft Security Blog
Microsoft Security Blog
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
腾讯CDC
小众软件
小众软件
G
Google Developers Blog
V
Visual Studio Blog
罗磊的独立博客
GbyAI
GbyAI
V
V2EX
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
L
LangChain Blog
Engineering at Meta
Engineering at Meta
量子位
The GitHub Blog
The GitHub Blog
博客园 - 司徒正美
WordPress大学
WordPress大学
B
Blog RSS Feed

博客园 - everx

CruiseControl.net - 找到的一些文档。分享出来 【摘抄】回归测试(Regression Test) ASP.NET MVC - View ASP.NET MVC - Controller(part Ⅱ) ASP.NET MVC - Controller(part Ⅰ) ASP.NET MVC - Model 学一下ASP.NET MVC C# 3.0的新特性 jQuery学习笔记(八) jQuery 学习笔记(七) SilverLight学习之路(四) Silverlight学习之路(三) - everx - 博客园 JQuery学习笔记(六) JQuery学习笔记(五) 初次使用log4net Silverlight学习之路(二) JQuery学习笔记(四) 播下silverlight的种子 JQuery学习笔记(三)
那就来说说ASP.NET MVC中的Routing吧
everx · 2009-10-23 · via 博客园 - everx

基本上,之前已经把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的入口,把它的原理掌握了有助于以后扩展我们的程序能更加顺手。