随着针对IIS 7.0 的URL 重写模块的发布,以及在.NET 框架3.5 SP1 中包含了 ASP.NET 路由(Routing),许多 ASP.NET 开发人员开始质问这两种特性彼此间的关系,以及应该何时使用。
Ruslan Yakushev 在 LearnIIS.NET 上发表了一篇很有指导意义的文章。
二者本质的区别在于:IIS URL 重写的处理方式比 ASP.NET 路由在层次上更低,对于客户端是不可见的。
Ruslan 给出了 IIS 7 URL 重写过程的可视化工作流。你可以看到 URL 重写模块是在请求被传递到请求处理器(Handler),例如 ASP.NET 管理的 ASPX 处理器之前被激活的。IIS URL 重写并不知道具体的请求处理器。
他同时还给出了 ASP.NET 路由过程的可视化工作流。可以看到 ASP.NET 路由就是一个请求分发器,它必须明确地获知一个特定的请求究竟应途经哪个处理器。
来自 Ruslan 的描述如下:
- URL 重写通常被用于在 Web 服务器处理请求之前操作 URL 路径。URL 重写模块并不知道处理器实际处理 URL 重写的任何内容。此外,实际的请求处理器并不知道 URL 是否已被重写。
- ASP.NET 路由通常根据请求的 URL 路径将请求分发到处理器。与 URL 重写相反,路由组件知道处理器,并能够选择可以为请求的 URL 生成反应的处理器。你可以将 ASP.NET 路由看作是一个高级的处理器映射机制。
- IIS URL 重写模块能够用于任何类型的 Web 应用程序,包括 ASP.NET,PHP,ASP 和静态文件。ASP.NET 路由只能用于基于.NET 框架的 Web 应用程序。
- 在用于应用程序池方面,不管是集成的还是经典的 IIS 管道模式,IIS URL 重写模块的工作方式都是相同的。而 ASP.NET 路由则会优先选择使用集成管道模式。ASP.NET 路由也可以工作于经典模式,但是在这种情况下,应用程序的 URL 必须包含文件扩展名,或者应用程序必须在 IIS 中使用“*”配置处理器。
- URL 重写模块可以根据域名、HTTP 标头和服务器变量进行重写判断。默认情况下,ASP.NET 路由只能使用 URL 路径以及标头的形式。
- 除了重写功能,URL 重写模块能够执行 HTTP 重定向,确定自定义状态码以及取消请求。ASP.NET 路由则不具有这些功能。
- URL 重写模块在当前版本中是不能扩展的。ASP.NET 路由完全能够扩展和定制。
评论