ASP.NET MVC路由

对于传统的ASP.NET Web Form应用来说,用户请求总是指向某个具体的物理文件,目标文件的路径决定了访问请求的URL。但是对于ASP.NET MVC应用来说,来自浏览器的请求总是指向定义在某个控制器Controller类型中的某个Action动作方法,请求URL与目标Controller/Action之间的映射是通过路由来实现的。

ASP.NET 路由

由于来自客户端的请求总是指向定义在某个Controller类型中的Action方法,且目标Controller和Action的名称由请求URL决定,所以必须采用某种机制根据请求URL解析出目标Controller和Action的名称,这种机制便是路由(Routing)。但路由系统并不专属于ASP.NET MVC,而是直接建立在ASP.NET上,实际路由的核心类型基本上定义在程序集System.Web.dll中。路由机制同样可以应用在Web Forms应用中,路由可帮助实现请求地址与物理文件的分离。

请求URL与物理文件的分离

对于一个ASP.NET Web Forms应用来说,一个有效的请求对应着一个具体的物理文件。部署在Web服务器上的物理文件可以是静态的,如图片或静态HTML文件等。 也可以是动态的如.aspx页面。

对于静态文件的请求,ASP.NET会直接返回文件的原始内容,而针对动态文件的请求则会涉及相关代码的执行。这种将URL与物理文件紧密捆绑的方式并不是一种很好的解决方案,带来的局限性主要体现在:

  • 灵活性

物理文件的路径决定了访问它的URL,如果物理文件路径发生改变,原本访问文件的URL将变得无效。

  • 可读性

URL不仅具备基本的可用性,能够访问正确的网络资源,还需具有很好的可读性。好的URL设计应该有眼看出针对它访问的目标资源是什么,请求地址与物理文件紧密绑定使我们失去了设计高可读性URL的机会。

  • SEO优化

对于网站开发来说,为了迎合搜索引擎检索的规则,需对URL进行有效的设计,使之能易于被主流的搜索引擎检索收录。如果URL完全与物理地址关联,无异于失去了SEO优化的能力。

因此,采用更为灵活的映射机制来实现请求URL与目标路径的分离。那么有什么办法能够帮助实现两者和之间的分离呢?很多人会想到“URL重写机制”。为了使Web应用可独立地设计用于访问应用资源的URL,微软的IIS7编写了URL重写模块,这是一个基于规则的URL重写引擎,它在URL被Web服务器处理之前根据定义的规则重定向某个物理文件。

URL重写机制在IIS级别解决了URL无物理地址的分离,其实现依赖于一个在注册到IIS管道上的本地代码模块,所以它可以寄存在IIS中的所有Web应用类型。与URL重写机制不同,路由系统则是ASP.NET的一部分,并通过托管代码编写。

你可能感兴趣的:(ASP.NET MVC路由)