在不同版本的 IIS 上使用 ASP.NET MVC

來源:互聯網
上載者:User
文章目錄
  • 整合模式和傳統模式
  • 在早期的 IIS 版本上使用 ASP.NET MVC
  • 將副檔名添加到路由表
  • 建立萬用字元指令碼映射
  • 總結

ASP.NET MVC Framework 依賴於 URL 路由。為了利用 URL 路由,可能不得不在 Web 服務器上執行額外的配置步驟。這些步驟取決於 Internet Information Services (IIS) 的版本和應用程式的請求處理模式。

IIS 的最新版本是版本 7.0。IIS 的此版本包括在 Windows Server 2008 中。還可以在除 Home Basic 以外的任何 Vista 作業系統上安裝 IIS 7.0(請參見 http://technet.microsoft.com/en-us/library/cc732624.aspx)。

IIS 7.0 支援兩種模式的處理請求。可以使用整合模式或傳統模式。以整合模式使用 IIS 7.0 時不需要執行任何特殊配置步驟。但是以傳統模式使用 IIS 7.0 時需要執行額外的配置。

Microsoft Windows Server 2003 包含 IIS 6.0。在使用 Windows Server 2003 作業系統時不能將 IIS 6.0 升級為 IIS 7.0。使用 IIS 6.0 時必須執行其他配置步驟。

Microsoft Windows XP Professional 包含 IIS 5.1。使用 IIS 5.1 時必須執行其他配置步驟。

最後,Microsoft Windows 2000 和 Microsoft Windows 2000 Professional 包含 IIS 5.0。使用 IIS 5.0 時必須執行其他配置步驟。

以下是不同 IIS 版本的總結:

  • IIS 7.0(整合模式)– 使用 URL 路由不需要特殊配置。
  • IIS 7.0(傳統模式)– 需要執行特殊配置才能使用 URL 路由。
  • IIS 6.0 或更低版本– 需要執行特殊配置才能使用 URL 路由。
整合模式和傳統模式

IIS 7.0 可以使用兩種請求處理模式處理請求:整合模式和傳統模式。整合模式可提供更好的效能和更多的功能。傳統模式用於向早期的 IIS 版本提供向後相容性。

請求處理模式由應用程式集區決定。通過確定與應用程式關聯的池,可以確定特定的 Web 應用程式使用何種處理模式。執行以下步驟:

  1. 啟動 Internet Information Services Manager。
  2. 在 Connections 視窗中選擇一個應用程式。
  3. 在 Actions 視窗中,單擊 Basic Settings連結以開啟 Edit Application 對話方塊, 1 所示。
  4. 注意選擇的 Application Pool。

預設情況下,IIS 配置為支援兩種應用程式集區:DefaultAppPoolClassic .NET AppPool。如果選擇DefaultAppPool,則應用程式在整合請求處理模式下運行。如果選擇Classic .NET AppPool,則應用程式在經典請求處理模式下運行。

圖 1:探測請求處理模式( 單擊查看大圖)

請注意,可以在 Edit Application 對話方塊中修改請求處理模式。單擊 Select 按鈕並更改與應用程式相關 App程式池。需要注意的是在將 ASP.NET 應用程式從傳統模式更改為整合模式時,存在相容性問題。更多詳細資料,請參閱以下文章:

  • 在 Windows Vista 和 Windows Server 2008 上將 ASP.NET 1.1 升級為 IIS 7.0 -- http://learn.iis.net/page.aspx/270/upgrading-aspnet-11-to-iis7-on-windows-vista--windows-server-2008/
  • ASP.NET 與 IIS 7.0 整合 - http://learn.iis.net/page.aspx/243/aspnet-integration-with-iis7/

如果 ASP.NET 應用程式使用DefaultAppPool,則不需要執行任何額外的步驟就可以讓 URL 路由(即 ASP.NET MVC)正常工作。然而,如果將 ASP.NET 應用程式配置為使用 Classic .NET AppPool,則請繼續閱讀本教程,還有更多的工作要做。

在早期的 IIS 版本上使用 ASP.NET MVC

如果需要在早於 IIS 7.0 的 IIS 版本上使用 ASP.NET MVC,或者需要在傳統模式下使用 IIS 7.0,則有兩個選項可供選擇。第一,修改路由表以使用副檔名。例如,不使用 URL /Store/Details,而是使用 URL /Store.aspx/Details。

第二個選項是建立萬用字元指令碼映射。萬用字元指令碼映射可以將每個請求映射到 ASP.NET Framework。

如果無權訪問 Web 服務器(例如,ASP.NET MVC 應用程式由 Internet Service Provider 託管),則需要使用第一個選項。如果不想修改 URL 的內容,但有權訪問 Web 服務器,則可以使用第二個選項。

我們將在下面的部分中詳細討論這兩個選項。

將副檔名添加到路由表

讓 URL 路由與早期的 IIS 版本協同工作的最簡單的方法是修改Global.asax 檔案中的路由表。程式清單 1 中的 Global.asax 檔案配置了一個名稱為 Default 的路由。

程式清單 1Global.asax(未修改)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Routing;
  7.  
  8. namespace MvcAppCS
  9. {
  10.      public class GlobalApplication : System.Web.HttpApplication
  11.      {
  12.           public static void RegisterRoutes(RouteCollection routes)
  13.           {
  14.                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  15.                routes.MapRoute(
  16.                     "Default",// Route name
  17.                     "{controller}/{action}/{id}",// URL with parameters
  18.                     new { controller = "Home", action = "Index", id = "" } 
  19.                          // Parameter defaults
  20.                );
  21.           }
  22.           protected void Application_Start()
  23.           {
  24.                RegisterRoutes(RouteTable.Routes);
  25.           }
  26.      }
  27. }

程式清單 1 中配置的 Default 路由允許按以下方式傳送 URL:

     /Home/Index

     /Product/Details/3

     /Product

不幸的是,早期的 IIS 版本不能將這些請求傳遞到 ASP.NET Framework。因此,這些請求不會傳送到控制器。例如,如果從瀏覽器發出 URL /Home/Index 請求,則將得到 2 所示的錯誤頁面。

 

圖 2:收到 404 Not Found 錯誤( 單擊查看大圖)

 

IIS 的早期版本只將特定的請求映射到 ASP.NET Framework。請求必須是帶有正確副檔名的 URL。例如,/SomePage.aspx 請求將映射到 ASP.NET Framework。/SomePage.htm 請求則無法映射。

因此,要讓 URL 路由工作,我們必須修改 Default 路由,以使其包含能夠映射到 ASP.NET Framework 的副檔名。能夠映射到 ASP.NET 的副檔名有 .aspx, .axd, 和 .ashx 等。

程式清單 2 中修改的 Global.asax 檔案可以與 IIS 的早期版本協同工作。

程式清單 2 Global.asax(使用副檔名修改後)

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Mvc;
  6. using System.Web.Routing;
  7.  
  8. namespace MvcAppCS
  9. {
  10.      public class GlobalApplication : System.Web.HttpApplication
  11.      {
  12.           public static void RegisterRoutes(RouteCollection routes)
  13.           {
  14.                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
  15.                routes.MapRoute(
  16.                     "Default", // Route name
  17.                     "{controller}.aspx/{action}/{id}", // URL with parameters
  18.                     new { controller = "Home", action = "Index", id = ""} 
  19.                          // Parameter defaults
  20.                );
  21.           }
  22.           protected void Application_Start()
  23.           {
  24.                RegisterRoutes(RouteTable.Routes);
  25.           }
  26.      }
  27. }

重要事項:更改 Global.asax 檔案後不要忘記再次產生 ASP.NET MVC 應用程式。

程式清單 2 中只有一處對 Global.asax 檔案的細小但重要的更改。現在 Default 路由的 URL 模式如下所示:

     {controller}.aspx/{action}/{id}

添加 .aspx 副檔名就是更改了 URL 路由模型解析的檔案類型。通過這一更改,ASP.NET MVC 應用程式現在可以傳送以下請求:

     /Home.aspx/Index

     /Product.aspx/Details/3

     /Product.aspx

如此修改路由表後,需要確保應用程式中的所有連結與新的 URL 模式相容。換言之,需要確保所有的連結包含 .aspx 副檔名。如果使用 Html.ActionLink() Helper 方法產生連結,則應該不需要任何更改。

建立萬用字元指令碼映射

如果不想修改用於 ASP.NET MVC 應用程式的 URL 的內容,但有權訪問 Web 服務器,則可以使用另一個選項。可以建立萬用字元映射,將所有請求映射到 ASP.NET Framework 的 Web 服務器。通過這種方法,可以在 IIS 7.0(傳統模式)或 IIS 6.0 上使用預設的 ASP.NET MVC 路由表。

請注意,此選項將導致 IIS 解析每個向 Web 服務器發出的請求。這包括對映像、經典 ASP 頁面和 HTML 頁面的請求。因此,啟用到 ASP.NET 的萬用字元指令碼映射確實關係到效能問題。

以下是在 IIS 7.0 上啟用萬用字元指令碼映射的方法:

  1. 在 Connections 視窗中選擇應用程式。
  2. 確保選中 Features 視圖。
  3. 雙擊 Handler Mappings 按鈕。
  4. 單擊 Add Wildcard Script Map 連結, 3 所示。
  5. 輸入到 aspnet_isapi.DLL 檔案的路徑(可以從 PageHandlerFactory 指令碼映射複製此路徑)。
  6. 輸入名稱 MVC。
  7. 單擊 OK 按鈕。

 

圖 3:使用 IIS 7.0 建立一個萬用字元指令碼映射( 單擊查看大圖)

 

按以下步驟使用 IIS 6.0 建立萬用字元指令碼映射:

  1. 按右鍵網站並選擇 Properties。
  2. 選擇 Home Directory 選項卡。
  3. 單擊 Configuration 按鈕。
  4. 選擇 Mappings 選項卡。
  5. 單擊 Insert 按鈕, 4 所示。
  6. 將 aspnet_isapi.dll 的路徑粘貼到 Executable 欄位(可以從 .aspx 檔案的指令碼映射複製此路徑)。
  7. 取消選中 Verify that file exists複選框。
  8. 單擊 OK 按鈕。

 

圖 4:使用 IIS 6.0 建立一個萬用字元指令碼映射( 單擊查看大圖)

 

啟用用於 IIS 7.0 或 IIS 6.0 的萬用字元指令碼映射後,可以讓請求與如下所示的預設路由表協同工作:

     /Home/Index

     /Product/Details/3

     /Product

總結

本教程的目的是解釋如何在使用早期版本的 IIS(或傳統模式的 IIS 7.0)的同時使用 ASP.NET MVC。我們討論了讓 URL 路由與早期版本的 IIS 協同工作的兩種方法:修改預設的路由表或建立萬用字元指令碼映射。

第一種方法要求修改 ASP.NET MVC 應用程式中使用的 URL。此方法的優勢在於不需要訪問 Web 服務器就可以修改路由表。這意味著由 網際網路代理程式公司代理 ASP.NET MVC 應用程式時可以使用此方法。

第二種方法是建立萬用字元指令碼映射。此方法的優勢在於不需要修改 URL。第二種方法的不利之處在於它可能影響 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.