Bagikan melalui


XmlResolver kelas

Artikel ini menyediakan keterangan tambahan untuk dokumentasi referensi untuk API ini.

Jenis ini XmlResolver digunakan untuk mengatasi sumber daya XML eksternal, seperti entitas, definisi jenis dokumen (DTD), atau skema. Ini juga digunakan untuk memproses menyertakan dan mengimpor elemen yang ditemukan dalam lembar gaya Extensible Stylesheet Language (XSL) atau skema bahasa definisi Skema XML (XSD).

XmlResolver menangani semua aspek negosiasi koneksi ke sumber daya, termasuk menangani kredensial keamanan, membuka koneksi ke sumber data, dan mengembalikan sumber daya dalam bentuk aliran atau jenis objek lainnya. Objek yang memanggil XmlResolver memiliki tugas untuk menginterpretasikan aliran.

Namespace System.Xml mencakup dua implementasi XmlResolver konkret kelas:

Anda dapat membuat dan menentukan resolver Anda sendiri. Jika Anda tidak menentukan resolver, pembaca menggunakan default XmlUrlResolver tanpa kredensial pengguna.

Anda menentukan XmlResolver untuk digunakan dengan mengatur XmlReaderSettings.XmlResolver properti dan meneruskan XmlReaderSettings objek ke Create metode .

Jika sumber daya disimpan pada sistem yang memerlukan autentikasi, Anda menggunakan XmlResolver.Credentials properti untuk menentukan kredensial yang diperlukan.

Berikan kredensial autentikasi

File yang berisi data XML yang akan dibaca mungkin memiliki kebijakan akses terbatas. Jika autentikasi diperlukan untuk mengakses sumber daya jaringan, gunakan Credentials properti untuk menentukan kredensial yang diperlukan. Credentials Jika properti tidak diatur, kredensial diatur ke null.

Misalnya, asumsikan bahwa kredensial diperlukan saat meminta data dari web untuk tujuan autentikasi. Kecuali direktori virtual web mengizinkan akses anonim, Anda harus mengatur Credentials properti untuk menyediakan kredensial. Contoh berikut membuat XmlReader objek yang menggunakan XmlUrlResolver dengan kredensial default untuk mengakses http://localhost/bookstore/inventory.xml situs.

// 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)

Anda dapat menyediakan kredensial yang berbeda untuk URI yang berbeda dan menambahkannya ke cache. Kredensial ini digunakan untuk memeriksa autentikasi untuk URI yang berbeda terlepas dari sumber asli XML. Contoh berikut menunjukkan cara menambahkan kredensial ke cache.

// 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)

Pertimbangan keamanan

Pertimbangkan item berikut saat bekerja dengan XmlResolver kelas .

  • XmlResolver objek dapat berisi informasi sensitif seperti kredensial pengguna. Anda harus berhati-hati saat penembolokan XmlResolver objek dan tidak boleh meneruskan XmlResolver objek ke komponen yang tidak tepercaya.

  • Jika Anda merancang properti kelas yang menggunakan XmlResolver kelas , properti harus didefinisikan sebagai properti tulis-saja. Properti dapat digunakan untuk menentukan XmlResolver untuk digunakan, tetapi tidak dapat digunakan untuk mengembalikan XmlResolver objek.

  • Jika aplikasi Anda menerima XmlResolver objek dari kode yang tidak tepercaya, Anda tidak dapat berasumsi bahwa URI yang diteruskan ke GetEntity metode akan sama dengan yang dikembalikan oleh ResolveUri metode . Kelas yang berasal dari kelas dapat mengambil alih GetEntity metode dan mengembalikan data yang berbeda dari XmlResolver apa yang terkandung dalam URI asli.

  • Aplikasi Anda dapat mengurangi penolakan memori ancaman layanan ke GetEntity metode dengan menerapkan IStream yang membatasi jumlah byte yang dibaca. Ini membantu melindungi dari situasi di mana kode berbahaya mencoba meneruskan aliran byte tak terbatas ke GetEntity metode .