共用方式為


Virtual Directory 預設值 < virtualDirectoryDefaults>

概觀

專案的 <virtualDirectoryDefaults> 元素 <application> 會指定父應用程式中所有虛擬目錄的預設設定。 元素 <virtualDirectoryDefaults> 有助於定義您希望父應用程式中所有虛擬目錄在沒有明確定義屬性時隱含共用的通用屬性。

注意

如果在區段和 <virtualDirectory> 區段中設定 <virtualDirectoryDefaults> 了特定虛擬目錄的相同屬性或子專案,則 區段中的 <virtualDirectory> 組態會用於該虛擬目錄。

相容性

版本 備註
IIS 10.0 未在 IIS 10.0 中修改專案 <virtualDirectoryDefaults>
IIS 8.5 未在 IIS 8.5 中修改專案 <virtualDirectoryDefaults>
IIS 8.0 未在 IIS 8.0 中修改專案 <virtualDirectoryDefaults>
IIS 7.5 未在 IIS 7.5 中修改專案 <virtualDirectoryDefaults>
IIS 7.0 元素 <virtualDirectoryDefaults><application> 元素是在 IIS 7.0 中引進。
IIS 6.0 N/A

安裝程式

元素 <virtualDirectoryDefaults><application> 元素包含在 IIS 7 的預設安裝中。

作法

如何設定應用程式的預設虛擬目錄認證

  1. 開啟 [Internet Information Services (IIS) 管理員

    • 如果您使用 Windows Server 2012 或 Windows Server 2012 R2:

      • 在工作列上,依序按一下 [伺服器管理員]、[工具],然後按一下 [Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows 8 或 Windows 8.1:

      • 按住Windows鍵,按字母X,然後按一下[主控台]。
      • 按一下 [系統管理工具],然後按兩下 [ Internet Information Services (IIS) Manager]。
    • 如果您使用 Windows Server 2008 或 Windows Server 2008 R2:

      • 在工作列上,按一下 [ 開始],指向 [ 系統管理工具],然後按一下 [ Internet Information Services (IIS) 管理員]。
    • 如果您使用 Windows Vista 或 Windows 7:

      • 在工作列上,按一下 [開始],然後按一下[主控台]。
      • 按兩下 [系統管理工具],然後按兩下 [ Internet Information Services] (IIS) Manager
  2. 在 [ 連線 ] 窗格中,依序展開伺服器名稱、 [月臺] 節點、月臺的節點,然後按一下應用程式的名稱。

  3. 在網站的 [首頁] 窗格中,按一下 [動作] 窗格中的 [檢視虛擬目錄]。
    I S Manager 的螢幕擷取畫面,其中顯示主窗格中的 MyApplication Home。[動作] 窗格中已選取 [檢視虛擬目錄]。

  4. 在 [虛擬目錄]窗格中,按一下 [動作] 窗格中的 [設定虛擬目錄預設值...]。
    I S Manager 的螢幕擷取畫面,其中顯示主要窗格中的虛擬目錄。[動作] 窗格中已選取 [新增虛擬目錄]。

  5. 在 [ 虛擬目錄預設值 ] 對話方塊中,指定應用程式的預設虛擬目錄認證,然後按一下 [ 確定]。
    [虛擬目錄預設值] 對話方塊的螢幕擷取畫面。已選取 [實體路徑認證]。

組態

屬性

屬性 描述
allowSubDirConfig 選擇性的 Boolean 屬性。

指定 IIS 是否在低於目前層級的內容目錄中尋找Web.config檔案, (true) 或沒有在低於目前層級的內容目錄中尋找Web.config檔案, (false) 。

預設值是 true
logonMethod 選擇性列舉屬性。

指定父月臺中應用程式內所有虛擬目錄的預設登入方法。

logonMethod屬性可以是下列其中一個可能的值。 預設值為 ClearText
描述
Batch 此登入類型適用于批次伺服器,其中進程可能代表使用者執行,而不需要該使用者的直接介入。

數值為 1
ClearText 此登入類型會保留驗證套件中的名稱和密碼,這可讓伺服器在模擬用戶端時連線到其他網路伺服器。

數值為 3
Interactive 此登入類型適用于將以互動方式使用電腦的使用者。

數值為 0
Network 此登入類型適用于驗證純文字密碼的高效能伺服器。 此登入類型不會快取認證。

數值為 2
如需這些值的詳細資訊,請參閱 LogonUser
password 選擇性字串屬性。

指定與使用者名稱相關聯的密碼。

注意: 若要避免在組態檔中儲存未加密的密碼字串,請一律使用 AppCmd.exe 或 IIS 管理員來輸入密碼。 如果您使用這些管理工具,密碼字串會在將密碼字串寫入 XML 組態檔之前自動加密。 這比儲存未加密的密碼提供更好的密碼安全性。
path 選擇性字串屬性。

指定父月臺中應用程式內所有虛擬目錄的預設虛擬路徑。
physicalPath 選擇性字串屬性。

指定父月臺中應用程式內所有虛擬目錄的預設實體路徑。
userName 選擇性字串屬性。

指定帳戶的預設使用者名稱,該帳戶可以存取父月臺中應用程式內所有虛擬目錄的組態檔和內容。

子元素

無。

組態範例

下列組態範例會指定預設網站 「/MyApp」 應用程式中虛擬目錄的預設登入方法。

<sites>
   <site name="Default Web Site" id="1">
      <application path="/">
         <virtualDirectory path="/" physicalPath="C:\Inetpub\wwwroot" />
      </application>
      <application path="/MyApp" applicationPool="DefaultAppPool">
         <virtualDirectory path="/" physicalPath="C:\inetpub\myapp" />
         <virtualDirectoryDefaults logonMethod="Network" />
      </application>
      <bindings>
         <binding protocol="http" bindingInformation="*:80:" />
      </bindings>
  </site>
</sites>

範例程式碼

下列程式碼範例會在預設網站的 「/MyApp」 應用程式中指定虛擬目錄的預設登入方法。

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites "/[name='Default Web Site'].[path='/MyApp'].virtualDirectoryDefaults.logonMethod:Network" /commit:apphost

注意

當您使用 AppCmd.exe 來設定這些設定時,請務必將 認可 參數 apphost 設定為 。 這會將組態設定認可至ApplicationHost.config檔案中的適當位置區段。

C#

using System;
using System.Text;
using Microsoft.Web.Administration;

internal static class Sample
{
   private static void Main()
   {
      using (ServerManager serverManager = new ServerManager())
      {

         Configuration config = serverManager.GetApplicationHostConfiguration();
         ConfigurationSection sitesSection = config.GetSection("system.applicationHost/sites");

         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();
         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"Default Web Site");
         if (siteElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElementCollection siteCollection = siteElement.GetCollection();
         ConfigurationElement applicationElement = FindElement(siteCollection, "application", "path", @"/MyApp");
         if (applicationElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement virtualDirectoryDefaultsElement = applicationElement.GetChildElement("virtualDirectoryDefaults");
         virtualDirectoryDefaultsElement["logonMethod"] = @"Network";

         serverManager.CommitChanges();
      }
   }

   private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)
   {
      foreach (ConfigurationElement element in collection)
      {
         if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))
         {
            bool matches = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample

   Sub Main()

      Dim serverManager As ServerManager = New ServerManager
      Dim config As Configuration = serverManager.GetApplicationHostConfiguration
      Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")

      Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection
      Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "name", "Default Web Site")
      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim siteCollection As ConfigurationElementCollection = siteElement.GetCollection
      Dim applicationElement As ConfigurationElement = FindElement(siteCollection, "application", "path", "/MyApp")
      If (applicationElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim virtualDirectoryDefaultsElement As ConfigurationElement = applicationElement.GetChildElement("virtualDirectoryDefaults")
      virtualDirectoryDefaultsElement("logonMethod") = "Network"

      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As Boolean = True
            Dim i As Integer
            For i = 0 To keyValues.Length - 1 Step 2
               Dim o As Object = element.GetAttributeValue(keyValues(i))
               Dim value As String = Nothing
               If (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End Module

JavaScript

var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager');
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST";
var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST");

var sitesCollection = sitesSection.Collection;
var siteElementPos = FindElement(sitesCollection, "site", ["name", "Default Web Site"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);

var siteCollection = siteElement.Collection;
var applicationElementPos = FindElement(siteCollection, "application", ["path", "/MyApp"]);
if (applicationElementPos == -1) throw "Element not found!";
var applicationElement = siteCollection.Item(applicationElementPos);

var virtualDirectoryDefaultsElement = applicationElement.ChildElements.Item("virtualDirectoryDefaults");
virtualDirectoryDefaultsElement.Properties.Item("logonMethod").Value = "Network";

adminManager.CommitChanges();

function FindElement(collection, elementTagName, valuesToMatch) {
   for (var i = 0; i < collection.Count; i++) {
      var element = collection.Item(i);
      if (element.Name == elementTagName) {
         var matches = true;
         for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = WScript.CreateObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"
Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")

Set sitesCollection = sitesSection.Collection
siteElementPos = FindElement(sitesCollection, "site", Array("name", "Default Web Site"))
If (siteElementPos = -1) Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If
Set siteElement = sitesCollection.Item(siteElementPos)

Set siteCollection = siteElement.Collection
applicationElementPos = FindElement(siteCollection, "application", Array("path", "/MyApp"))
If (applicationElementPos = -1) Then
   WScript.Echo "Element not found!"
   WScript.Quit
End If
Set applicationElement = siteCollection.Item(applicationElementPos)

Set virtualDirectoryDefaultsElement = applicationElement.ChildElements.Item("virtualDirectoryDefaults")
virtualDirectoryDefaultsElement.Properties.Item("logonMethod").Value = "Network"

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function