概觀
專案的 <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 的預設安裝中。
作法
如何設定應用程式的預設虛擬目錄認證
開啟 [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。
在 [ 連線 ] 窗格中,依序展開伺服器名稱、 [月臺] 節點、月臺的節點,然後按一下應用程式的名稱。
在網站的 [首頁] 窗格中,按一下 [動作] 窗格中的 [檢視虛擬目錄]。
在 [虛擬目錄]窗格中,按一下 [動作] 窗格中的 [設定虛擬目錄預設值...]。
在 [ 虛擬目錄預設值 ] 對話方塊中,指定應用程式的預設虛擬目錄認證,然後按一下 [ 確定]。
組態
屬性
| 屬性 | 描述 | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
allowSubDirConfig |
選擇性的 Boolean 屬性。 指定 IIS 是否在低於目前層級的內容目錄中尋找Web.config檔案, (true) 或沒有在低於目前層級的內容目錄中尋找Web.config檔案, (false) 。 預設值是 true。 |
||||||||||
logonMethod |
選擇性列舉屬性。 指定父月臺中應用程式內所有虛擬目錄的預設登入方法。 logonMethod屬性可以是下列其中一個可能的值。 預設值為 ClearText。
|
||||||||||
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