共用方式為


XmlResolver 類別

本文提供此 API 參考文件的補充備註。

XmlResolver 類型可用來解析外部 XML 資源,例如實體、檔類型定義 (DTDs) 或架構。 它也可用來處理可延伸樣式表語言(XSL)樣式表或 XML 架構定義語言(XSD)架構中找到的包含和匯入元素。

XmlResolver 處理與資源連接交涉的所有層面,包括處理安全性認證、開啟數據源的連接,以及以數據流或其他物件類型的形式傳回資源。 呼叫 XmlResolver 的物件具有解譯數據流的工作。

命名空間 System.Xml 包含 類別的兩個具體實作 XmlResolver

您可以建立並指定自己的解析程式。 如果您未指定解析程式,讀取器會使用沒有使用者認證的預設值 XmlUrlResolver

您可以透過設定XmlResolver屬性,並將XmlReaderSettings.XmlResolver物件傳遞至XmlReaderSettings方法,來指定要使用的Create

如果資源儲存在需要驗證的系統上,您可以使用 XmlResolver.Credentials 屬性來指定必要的認證。

提供認證資料

包含要讀取之 XML 資料的檔案可能會有限制的存取原則。 如果需要驗證才能存取網路資源,請使用 Credentials 屬性來指定必要的認證。 Credentials如果未設定 屬性,認證會設定為 null

例如,假設從 Web 要求數據以進行驗證時需要認證。 除非 Web 虛擬目錄允許匿名存取,否則您必須設定 Credentials 屬性以提供認證。 下列範例會建立一個物件 XmlReader,該物件使用具有預設認證的 XmlUrlResolver 來存取 http://localhost/bookstore/inventory.xml 網站。

// Create a resolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials;

// Set the reader settings object to use the resolver.
settings.XmlResolver = resolver;

// Create the XmlReader object.
XmlReader reader = XmlReader.Create("http://ServerName/data/books.xml", settings);
' Create a resolver with default credentials.
Dim resolver as XmlUrlResolver = new XmlUrlResolver()
resolver.Credentials = System.Net.CredentialCache.DefaultCredentials

' Set the reader settings object to use the resolver.
settings.XmlResolver = resolver

' Create the XmlReader object.
Dim reader as XmlReader = XmlReader.Create("http://ServerName/data/books.xml", settings)

您可以針對不同的 URI 提供不同的認證,並將其新增至快取。 不論 XML 的原始來源為何,這些認證都會用來檢查不同 URI 的驗證。 下列範例示範如何將認證新增至快取。

// Create the credentials.
NetworkCredential myCred = new NetworkCredential(UserName,SecurelyStoredPassword,Domain);
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred);
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred);

// Set the credentials on the XmlUrlResolver object.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = myCache;

// Compile the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("http://serverName/data/xsl/order.xsl",XsltSettings.Default, resolver);
' Create the credentials.
Dim myCred As NetworkCredential = New NetworkCredential(UserName,SecurelyStoredPassword,Domain)
Dim myCache As CredentialCache = New CredentialCache()
myCache.Add(new Uri("http://www.contoso.com/"), "Basic", myCred)
myCache.Add(new Uri("http://app.contoso.com/"), "Basic", myCred)

' Set the credentials on the XmlUrlResolver object.
Dim resolver As XmlUrlResolver = New XmlUrlResolver()
resolver.Credentials = myCache

' Compile the style sheet.
Dim xslt As XslCompiledTransform = New XslCompiledTransform()
xslt.Load("http://serverName/data/xsl/order.xsl", XsltSettings.Default, resolver)

安全性考慮

使用 XmlResolver 類別時,請考慮下列項目。

  • XmlResolver 物件可以包含敏感性資訊,例如用戶認證。 快取 XmlResolver 物件時,您應該小心,不應該將 XmlResolver 對象傳遞至不受信任的元件。

  • 如果您要設計使用 XmlResolver 類別的類別屬性,則應將該屬性定義為唯寫屬性。 屬性可用於指定要使用的 XmlResolver ,但不能用來返回 XmlResolver 物件。

  • 如果您的應用程式接受 XmlResolver 來自不受信任程式碼的物件,則無法假設傳入方法的 GetEntity URI 會與方法所 ResolveUri 傳回的 URI 相同。 衍生自 XmlResolver 類別的類別可以覆寫 GetEntity 方法,並返回與原始 URI 中所包含的數據不同的資料。

  • 您的應用程式可以透過實施一個GetEntity,以限制讀取位元組的數量來減輕對IStream方法的記憶體阻斷服務威脅。 這有助於防範惡意代碼嘗試將無限位元組數據流傳遞至 GetEntity 方法的情況。