Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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 konkret dari kelas XmlResolver.
XmlUrlResolver adalah resolver default untuk semua kelas di namespace System.Xml. Ini mendukung protokol
file://danhttp://, serta permintaan dari kelas System.Net.WebRequest. Untuk contoh bagaimana memperluas kelas agar meningkatkan performa, lihat halaman referensi XmlUrlResolver.XmlSecureResolver membantu mengamankan objek lain XmlResolver dengan membungkus objek dan membatasi sumber daya yang dapat diaksesnya. Misalnya, XmlSecureResolver dapat melarang akses ke situs atau zona Internet tertentu.
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 menetapkan properti XmlReaderSettings.XmlResolver dan meneruskan objek XmlReaderSettings ke metode Create.
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. Jika properti Credentials tidak ditentukan, kredensial akan 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 objek XmlReader yang menggunakan XmlUrlResolver dengan kredensial default untuk mengakses situs 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)
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 hal-hal berikut saat bekerja dengan kelas XmlResolver.
XmlResolver objek dapat berisi informasi sensitif seperti kredensial pengguna. Anda harus berhati-hati saat meng-cache XmlResolver objek dan tidak boleh mengirimkan XmlResolver objek ke komponen yang tidak tepercaya.
Jika Anda merancang properti kelas yang menggunakan XmlResolver, properti harus didefinisikan sebagai properti hanya dapat ditulis. 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 diturunkan dari kelas XmlResolver dapat mengganti metode GetEntity dan mengembalikan data yang berbeda dari apa yang terkandung dalam URI asli.
Aplikasi Anda dapat mengurangi ancaman penolakan layanan memori terhadap metode GetEntity 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 .