IIS URL重寫模塊和ASP.NET路由組件比較

隨著針對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路由完全能夠擴展和定制。

查看英文原文:IIS URL Rewriting vs ASP.NET Routing

ASP.net實現無擴展名的URL重寫。簡單、方便、無需ISAPI
ASP.net實現無擴展名的URL重寫。簡單、方便、無需ISAPI
URL重寫已經有很多的方法,但是多數都有一個缺點,就是不支持無擴展名的網頁。比如把http://blog.knowsky.com/category_1_1.htm 轉換爲 http://blog.knowsky.com/category.aspx?id=1。微軟提供的方法需要在根目錄裏面...查看完整版>>ASP.net實現無擴展名的URL重寫。簡單、方便、無需ISAPI
 
asp.net URL重寫(URLRewriter) 之簡化版
在 asp.net 裏實現 URL重寫(URLRewriter)的一個最簡單的方法。參考了 (作者 Scott Mitchell 翻譯:Janssen )的大作,雖然沒有完全看明白,但是也照貓畫虎地做了一個,頗有“成就”感。寫出來分享一下。原作裏講了...查看完整版>>asp.net URL重寫(URLRewriter) 之簡化版
 
在Asp.Net中采用HttpModules來重寫URLs
據說通過HttpModules可以將類似于:http://www.infotouch.cn/detail.aspx?id=120 的URL地址重寫爲:http://www.infotouch.cn/detail/120.aspx 。這樣最直接的好處就是可以讓搜索引擎搜索到頁面,因爲搜索引擎對?之後...查看完整版>>在Asp.Net中采用HttpModules來重寫URLs
 
在Asp.Net中采用HttpModules來重寫URLs
據說通過HttpModules可以將類似于: 。這樣最直接的好處就是可以讓搜索引擎搜索到頁面,因爲搜索引擎對?之後的參數不太理睬。今天嘗試了一下,發現一個需要注意的問題,就是HttpModules只能對特定擴展名的URL進行重...查看完整版>>在Asp.Net中采用HttpModules來重寫URLs
 
ASP.NET 1.1 沒有出現在 IIS 6.0 中的 Web 服務擴展列表中的解決方法
1. 單擊“開始”,指向“設置”,然後單擊“控制面板”。 2. 雙擊“管理工具”,然後雙擊“Internet 信息服務 (IIS) 管理器”。 3. 展開“計算機名”,然後單擊“Web 服務擴展”。 4. 在右窗格中,單擊“添加新的 We...查看完整版>>ASP.NET 1.1 沒有出現在 IIS 6.0 中的 Web 服務擴展列表中的解決方法
 
ASP.NET的本質之IIS以及進程模式
ASP.NET的本質之IIS以及進程模式
  asp.net對于編寫WEB應用程序以及組件來說是一個很好的框架,但是由于他的龐大性對于很多人來說要了解他的每一個細節好象是否不太可能,我一直認爲有必要了解一下基層結構的工作原理以便在設計時獲取更高的性能,...查看完整版>>ASP.NET的本質之IIS以及進程模式
 
徹底放棄IIS讓Apache也支持ASP.NET
  Apache是目前廣泛使用的一種網絡服務器程序,不僅在UNIX/LINUX平台上被大量使用,而且在Windows平台上也有許多站點放棄了IIS而轉向Apache。.NET是微軟推出的功能強大的開發技術,其目標就是與Java抗衡。ASP.NET非...查看完整版>>徹底放棄IIS讓Apache也支持ASP.NET
 
IIS運行不了ASP.NET的解決辦法
一般IIS運行不了ASP.NET,試一下下面四種方法,99%有效:     1。.NET 安裝的順序應該是先裝IIS,再裝VS.NET,如果次序反了,或者IIS重裝了,就需要使用aspnet_regiis.exe -i來重新安裝IIS Mapping(主要用于asp...查看完整版>>IIS運行不了ASP.NET的解決辦法
 
Web虛擬目錄:Asp.net實現IIS控制管理
  (一)CreateWebDir.cs 使用示例  string sServer = "localhost";  string VirtualDir = "Bug2004";  \\虛擬目錄  string PathDir  = @"D:\myWebDirTest\Bug2000"  \\物理目錄  IISManager iisMg ...查看完整版>>Web虛擬目錄:Asp.net實現IIS控制管理
 
 
回到王朝網路移動版首頁