ASP.NET 組態案例

更新:2007 年 11 月

伺服器收到需要特定 Web 資源的要求時,ASP.NET 會使用要求的 URL 虛擬目錄路徑中所有的組態檔,以階層式方式計算該資源的組態設定。多數的區域組態設定會覆寫父組態檔的設定。

組態案例 1

例如,您的網站也許具有下列實體檔案結構,其中 Application Root 目錄等於應用程式的虛擬目錄。

一般而言,最後的組態設定會覆寫父目錄中所提供的相同區段的設定。以集合項目而言,設定不會被覆寫,而會加入至集合。

注意事項:

自訂的區段處理常式可能會實作不同的繼承配置。

假設 SubDir1 目錄中有 Web.config 檔,而 Application Root 或 SubDir2 目錄中則沒有這個檔案。在這種情況下,ASP.NET 會使用三個組態檔計算 SubDir1 目錄的組態設定。最高層級的檔案位於 %systemroot%\Microsoft .NET \Framework\versionNumber\CONFIG 目錄。這個名為 Machine.config 的檔案位於電腦層級。所有執行指定之 .NET Framework 版本 (versionNumber) 的 .NET Framework 應用程式都會從這個檔案繼承設定。次高層級的檔案是位於相同位置的根 Web.config 檔。所有執行 .NET Framework 指定版本的 ASP.NET 應用程式都是以繼承方式取得其設定。第三個組態檔是位於 SubDir1 目錄的 Web.config 檔。

假設位於 SubDir1 目錄的 Web.config 檔包含 anonymousIdentification 項目,且 enabled 屬性 (Attribute) 設定為 true。enabled 屬性的預設設定是 false。這是內部預設值,不會指定在任何根組態檔中。因為在 Application Root 或 SubDir2 目錄中不會有修改 anonymousIdentification 項目的組態檔,所以匿名使用者無法存取這些目錄中的 ASP.NET 資源。不過,匿名使用者的確可以存取 SubDir1 目錄中的 ASP.NET 資源。

安全性注意事項:

ASP.NET 組態系統僅套用於 ASP.NET 資源,這是登錄為由 ASP.NET 使用 Aspnet_isapi.dll 處理的資源。根據預設,組態系統不會為非 ASP.NET 的資源提供授權。例如 ASP、HTML、TXT、GIF 及 JPEG 檔都是每個使用者可存取的檔案類型。前面範例中,如果目錄瀏覽已啟用且沒有其他限制,則所有使用者都可以檢視應用程式根目錄、SubDir1 和 SubDir2 內的非 ASP.NET 檔。如需 ASP.NET 安全性的詳細資訊,請參閱 ASP.NET Web 應用程式安全性

組態案例 2

下列網站的檔案結構中,應用程式虛擬目錄會對應到應用程式根目錄 (MyAppRootDir)。

MyAppRootDir
    SubDir1
        SubDir1A
    SubDir2

除了在 ASP.NET 組態檔階層架構和繼承的<ASP.NET 繼承的限制>章節中說明的情況外,任何目錄中的組態設定都會覆寫撰寫於父目錄中的設定。例如,您可藉由完成下列步驟配置應用程式設定,將 MyAppRootDir 和 SubDir2 中的 ASP.NET 資源的存取權授與所有的使用者,但僅將 SubDir1 和 SubDir1A 中的 ASP.NET 資源的存取權授與選取的使用者:

  1. 保留 MyAppRootDir 的現有設定。MyAppRootDir 中的 ASP.NET 資源會從 Machine.config 檔案繼承預設設定,其中一個設定可允許匿名存取。在此階段,MyAppRootDir 和三個子目錄會繼承這個驗證設定。

  2. 將 Web.config 檔案放置在具有驗證設定的 SubDir1 中,僅允許選取的使用者存取 SubDir1。這項作業會覆寫 Machine.config 檔中的設定所允許的匿名存取,並向下繼承到 SubDir1A。與 SubDir1 位於相同層級的 SubDir2 不會繼承 SubDir1 中的驗證設定。

所有的 ASP.NET 應用程式都會繼承根 Web 層級的 Web.config 檔案中的預設設定。這個檔案的安全性組態區段預設設定可讓所有使用者存取所有的 URL 資源。範例中的應用程式根目錄沒有組態檔可修改安全性,所以所有的使用者都可存取其中的 ASP.NET 資源 (因為這個目錄會繼承電腦層級的組態檔)。如果 SubDir1 目錄內的 Web.config 檔包含的安全性組態區段只允許特定使用者存取,則 SubDir1A 會繼承該項設定。這樣所有的使用者都能存取應用程式根目錄及 SubDir2 內的 ASP.NET 資源,但只有選取的使用者可存取 SubDir1 和 SubDir1A 中的 ASP.NET 資源。

組態案例 3

虛擬目錄的組態設定 (也就是簡化存取路徑並隱藏真實目錄名稱的易記名稱),與實體目錄結構無關。因此,一定要小心組織虛擬目錄,以避免發生組態問題。例如,您可能會設定虛擬目錄,以從下列的實體目錄結構擷取名為 MyResource.aspx 的 ASP.NET Web 網頁。

MyDir
    SubDir1 (mapped from VDir1)
        SubDir1A (mapped from VDir1A)
            MyResource.aspx
    SubDir2

在這個範例中,在 SubDir1 中有一個 Web.config 檔,而在 SubDir1A 中也有另一個 Web.config 檔。如果用戶端使用 URL https://localhost/vdir1/subdir1A/MyResource.aspx 存取 C:\Subdir1\Subdir1A\MyResource.aspx,資源會從 Vdir1 繼承組態設定。但是,如果用戶端使用 URL https://localhost/vdir1A/MyResource.aspx 存取同一資源,則該資源並不會從 Vdir1 繼承設定。因此,不建議您以這種方式建立虛擬目錄,因為這可能會導致非預期的結果,甚至是應用程式失敗。

網際網路資訊服務 (IIS) 是透過 Web 所發行的所有資源的 Web 伺服器。ASP.NET 組態系統僅套用於 ASP.NET 資源,這是登錄為由 ASP.NET 使用 Aspnet_isapi.dll 處理的資源。根據預設,組態系統不會為非 ASP.NET 的資源提供安全性。例如 ASP、HTML、TXT、GIF 及 JPEG 檔都是每個使用者可存取的檔案類型。前面範例中,如果目錄瀏覽已啟用且沒有其他限制,則所有使用者都可以檢視應用程式根目錄、SubDir1 和 SubDir2 內的非 ASP.NET 檔。

請參閱

其他資源

管理 ASP.NET 網站

設定應用程式