在不同版本的IIS下使用ASP.NET MVC和URL Routing

來源:互聯網
上載者:User

(原創:灰灰蟲的家 http://hi.baidu.com/grayworm)

在這篇文章中我們學習在不同版本的IIS中使用ASP.NET MVC和URL Routing。我們學習針對IIS7.0、IIS6.0和更早版本的IIS的處理策略
ASP.NET MVC架構依賴於URL Routing,要充分利用URL Routing,我們需要對Web伺服器(IIS)進行一些額外的配置。
IIS的最新版本是Windows2008中的IIS7.0,我們也可以Vista系統中(除了Home Basic版)安裝IIS7.0。
IIS7.0是提供了兩種處理請求的模式-整合模式和傳統模式。如果使用IIS7.0的話,那我們不需要做任何配置,如果要使用傳統模式的話則需要我們做一些額外的配置工作。
在Windows2003中安裝的是IIS6.0,如果是Windows Server 2003的話,那我們可以把IIS6.0升級到IIS7.0。但如果我們使用IIS 6.0的話,那需要我們做一些額外的配置工作。
Windows XP專業版安裝的IIS5.1版本,因此我們也需要對IIS5.1進行一些額外的配置工作。
最後Windows2000使用的是IIS5.0,我們也需要對IIS5.0進行一些額外的配置工作。
下面是我們對不同版本IIS的總結:
IIS7.0(整合模式)- 不需要作任何配置就可以使用URL Routing。
IIS7.0(傳統模式) - 需要我們進行特別配置來使用URL Routing。
IIS6.0或更低版本 - 需要我們進行特別配置來使用URL Routing。

 

一、整合模式與傳統模式

IIS7.0可以使用兩種模式來處理請求-整合模式和傳統模式。整合模式提供更好、更多的功能;傳統模式則是為了向後相容較早版本的IIS。
請求的處理模式是由程式池決定的我們可以通過指定程式池與應用程式關聯的方式來設定web應用程式的請求處理模式。步驟如下:
1. 運行IIS服務管理員
2. 在Connections視窗選擇一個應用程式
3. 在Actions視窗中單擊Basic Settings串連開啟Edit Application對話方塊,如所示。
4. 設定Application pool。
預設情況下,IIS被配置為支援兩種應用程式集區:DefaultAppPool和Classic .NET AppPool。如果設為DefaultAppPool,那我們的應用程式就運行在整合請求處理模式下。如果設定Classic .NET AppPool,那我們的應用程式就運行在傳統的請求處理模式下。
《圖1》
需要注意的是,我們通過點擊Edit Application對話方塊中的”Select”按鈕來改變程式池與應用程式的關聯關係,來修改請求處理模式。但ASP.NET應用程式在從傳統模式遷移到整合模式的時候需要解決幾個相容性的問題。更多的資訊請參見下列文章:
Upgrading ASP.NET 1.1 to IIS 7.0 on Windows Vista and Windows Server 2008 --http://learn.iis.net/page.aspx/270/upgrading-aspnet-11-to-iis7-on-windows-vista--windows-server-2008/
ASP.NET Integration With IIS 7.0 - http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis7/
如果我們的ASP.NET應用程式使用的是DefaultAppPool,那我們不用做任何配置就可以使用URL Routing功能了。但如果ASP.NET程式被配置為Classic .NET AppPool,那請繼續向下看。

 

二、在舊版本的IIS中使用ASP.NET MVC(原創:灰灰蟲的家 http://hi.baidu.com/grayworm)
如果我們使用的IIS版號比IIS7.0低或者使用的是IIS7.0傳統模式,那我們有兩種選擇:
1、 修改路由表,加上副檔名。如我們把/Store/Details的URL地址換為/Store.aspx/Details
2、 建立wildcard script map。wildcard script map使我們把每個請求都映射到ASP.NET架構上。
如果我不能修改伺服器的配置,那我們只好採用第一種方式,如果我們不想修改URL地址,那我們必須採用第二種方式,去配置IIS web伺服器。

在這是我們分別討論兩種方法:
(一)向路由表中加副檔名。
要使URL Routing能夠在舊版本IIS上啟動並執行最簡單的方法就是開啟Global.asax檔案,修改我們的路由表。路由表的代碼如下:
Listing 1 – Global.asax (unmodified)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcAppCS
{     
   public class GlobalApplication : 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);          
    }     
   }
}
預設的路由配置可以對我們下面的ULR地址進行路由:
     /Home/Index
      /Product/Details/3
      /Product
然而不幸的是,舊版本的IIS不會把這樣的請求傳遞給ASP.NET架構,因此這些請求也不會被路由到控制器。比如我們請求/Home/Index這個URL時,會產生一個錯誤頁面的提示。

《圖2》
舊版的IIS只能把那些具有特定副檔名的URL請求發送給ASP.NET架構。比如/SomePage.aspx請求會被映射到ASP.NET架構,而/SomePage.htm則不會被映射到ASP.NET架構。
因此,要想使URL Routing能夠正常工作,我們必須要修改預設路由,使其包含副檔名,以映射到ASP.NET 架構中去。能夠映射到ASP.NET架構中的副檔名有.aspx .axd 和.ashx
修改後的Global.asax檔案如下所示
Listing 2 – Global.asax (modified with extensions)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcAppCS
{     
   public class GlobalApplication : System.Web.HttpApplication     
   {          
    public static void RegisterRoutes(RouteCollection routes)          
    {               
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}");               
     routes.MapRoute(                    
     "Default", // Route name                    
    "{controller}.aspx/{action}/{id}", // URL with parameters                    
     new { controller = "Home", action = "Index", id = ""}// Parameter defaults               
     );          
    }          
    protected void Application_Start()          
    {               
     RegisterRoutes(RouteTable.Routes);          
    }     
   }
}
注意:在修改完Global.asax檔案後要記得重新編譯我們的ASP.NET MVC應用程。
在上面的代碼中,我們做了一個很小但很重要的修改,我們把預設路由修改為如下格式:
{controller}.aspx/{action}/{id}
由於這種更改,因此ASP.NET MVC應用程路由只能映射下面這種形式了
     /Home.aspx/Index
      /Product.aspx/Details/3
      /Product.aspx
當我們修改完路由表後,我們還要確保程式中的所有超串連的URL地址也都已做相應的修改。換句話說,要保證所有的超連結導航地址中都包含.aspx副檔名。如果我們使用Html.ActionLink()方法產生的超連結,那我們不需要對超連結做更改。

(二)建立Wildcard Script Map(原創:灰灰蟲的家 http://hi.baidu.com/grayworm)
如果我們不想修改ASP.NET MVC應用程式中的URL地址,並且可以訪問到Web伺服器,那我們可以通過建立wildcard script map方式來把所有請求映射到ASP.NET架構中去。這樣就避免修改預設的由表了。
要搞明的一點是,這種修改會使IIS對每個請求都會處理,那怕是請求一張圖片、ASP頁面、HTML頁面。因此使用wildcar script map會使操作更隱式。

啟用IIS7.0的wildcard script map
1. 在Connections視窗中選擇我們的應用程式
2. 確定選中了Features視圖。
3. 雙擊Handler Mappings按鈕。
4. 單擊Add Wildcard Script Map,。
5. 輸入aspnet_isapi.dll檔案的路徑
6. 在Name文字框中輸入MVC
7. 點擊OK按鈕。

 

《圖3》

在IIS6.0中建立wildcar script map的步驟:
1、 右擊網站,選擇屬性
2、 選擇“Home Directory”選項卡
3、 點擊“Configuration”按鈕
4、 選擇“Mappings”選項卡
5、 點擊“Insert”按鈕,如所云漢
6、 在Executeable文字框中輸入aspnet_isapi.dll檔案所在的路徑
7、 去掉Verify that file exists複選框前的勾。
8、 點擊OK按鈕
《圖4》

當我們配置完wildcard script map我們可以使用預設的路由表來處理下面的URL地址
      /Home/Index
      /Product/Details/3
      /Product

 

總結
這篇文章中我們解釋了如何在舊版本IIS(或IIS7.0傳統模式下)運行ASP.NET MVC程。我們討論了兩種方式來解決URL Routing與舊版本IIS協同工作問題 :修改預設路由表或建立wildcard script map
第一種方法需要我們修改ASP.NET MVC應用程式,這種做法的好處是,我們不需要操作web伺服器,而只是修改一下程式中的路由表即可。
第二種方法是需要我們建立wildcard script map,這種做法的好處是,我們不需要修改我們的代碼,但缺點是會影響ASP.NET MVC程式的效能。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.