ASP.NET路由
由于来自客户端的请求总是指向定义在某个Controller类型中的某个Action方法,并且目标Controller和Action的名称由请求URL决定,所以必须采用某种机制根据请求URL解析出目标Controller和Action的名称,我们将这种机制称为“路由(Routing)”但是路由系统并不是专属于ASP.NET MVC的,而是直接建立在ASP.NET上(实现实现路由的核心类型基本上定义在程序集“System.Web.dll”中)。路由机制同样可以应用在WebForms应用中,它可以帮助我们实现请求地址与物理文件的分离。
2.1.1请求URL与物理文件的分离
对于一个ASP.NET Web Forms应用来说,通常情况下一个优秀的请求都对应着一个具体的物理文件。部署在Web服务器上的物理文件可以是静态的也可以是动态的。对于静态文件的请求,ASP.NET会直接返回文件的原始内容,而针对动态文件的请求则会涉及相关代码的执行。这种将URL与物理文件紧密绑定在一起的方法并不是一种好的解决方案,它带来的局限性主要体现在如下几个方面。
1.灵活性。物理文件的路径决定了访问它的URL,如果物理文件的路径发生改变,原来访问该文件的URL将变得无效。
2.可读性。在很多时候,URL不仅仅具备基本的可用性,还需要具备良好的可读性。
3.SEO优化。对于网站开发来说,为了迎合搜索引擎检索规则,我们需要对URL进行有效的设计,使之能易于被主流的引擎检索收录。如果URL完全与物理地址关联在一起,这无异于失去了SEO优化的能力。
上述3个因素促使我们不得不采用一种更加灵活的映射机制来实现URL与目标文件路径的分离。
为了使Web应用可以独立地设计用于访问应用资源的URL,微软为IIS7编写了一个URL重写模块。这是一个基于规则的URL重写引擎,它在URL被Web服务器处理之前根据定义的规则重新定向某个物理文件。
URL重写机制在IIS级别解决了URL与物理地址的分离,它的实现依赖于一个注册到IIS管道上的本地(Native)代码模块,所以它可以应用于寄宿在IIS中所有Web应用类型。与URL重写机制不同,路由系统则是ASP.NET的一部分,并且是通过托管代码编写的。