XmlUrlResolver Класс
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Разрешает внешние XML-ресурсы с именем универсального идентификатора ресурса (URI).
public ref class XmlUrlResolver : System::Xml::XmlResolver
public class XmlUrlResolver : System.Xml.XmlResolver
type XmlUrlResolver = class
inherit XmlResolver
Public Class XmlUrlResolver
Inherits XmlResolver
- Наследование
В следующем примере создается XmlReader, использующая XmlUrlResolver с учетными данными по умолчанию.
// Create an XmlUrlResolver with default credentials.
XmlUrlResolver resolver = new XmlUrlResolver();
resolver.Credentials = CredentialCache.DefaultCredentials;
// Create the reader.
XmlReaderSettings settings = new XmlReaderSettings();
settings.XmlResolver = resolver;
XmlReader reader =
XmlReader.Create("http://serverName/data/books.xml", settings);
' Create an XmlUrlResolver with default credentials.
Dim resolver As New XmlUrlResolver()
resolver.Credentials = CredentialCache.DefaultCredentials
' Create the reader.
Dim settings As New XmlReaderSettings()
settings.XmlResolver = resolver
Dim reader As XmlReader = _
XmlReader.Create("http://serverName/data/books.xml", settings)
XmlUrlResolver используется для разрешения внешних XML-ресурсов, таких как сущности, определения типов документов (DTD) или схемы. Он также используется для обработки и импорта элементов, найденных в таблицах стилей XSL или схемах XSD.
XmlUrlResolver — это сопоставитель по умолчанию для всех классов в пространстве имен System.Xml. Он поддерживает протоколы file://
и http://
и запросы из класса WebRequest.
Маңызды
XmlUrlResolver объекты могут содержать конфиденциальную информацию, например учетные данные пользователя. При кэшировании XmlUrlResolver объектов следует тщательно следить за тем, чтобы объекты XmlUrlResolver не передавалися в ненадежный компонент.
Если средство чтения XML (XmlReader) считывает XML-файл, содержащий внешний DTD, он вызывает метод XmlUrlResolver.GetEntityAsync для получения представления потока DTD. Если URI DTD является относительным URI, средство чтения XML вызывает метод XmlUrlResolver.ResolveUri и возвращает абсолютный URI для заданных relativeUri
и baseURi
параметров. Если XmlUrlResolver не знает, как устранить универсальный код ресурса (URI), он возвращает null
.
Метод XmlUrlResolver.GetEntity использует сведения в свойстве Credentials, чтобы получить доступ к ресурсу. По соображениям безопасности нет get
доступа к этому свойству. При перезаписи XmlResolverGetEntity — это метод, который использует сведения о учетных данных в свойстве Credentials.
Разрешение всех остальных XML-ресурсов очень похоже на разрешение DTD. XmlResolver согласовывает соединение с внешним ресурсом и возвращает Stream представление содержимого. Объект, вызывающий XmlResolver интерпретирует поток.
Поведение по умолчанию класса XmlUrlResolver заключается в том, чтобы разрешить ресурс данных XML из источника, а не из кэша. В некоторых случаях разрешение ресурса данных из кэша может повысить производительность приложения, сохранив поездку на сервер ресурса данных. Повышение производительности должно быть взвешировано в отношении необходимости up-to-даты содержимого.
В следующем примере расширяется XmlUrlResolver и создается новый класс XmlCachingResolver
для получения ресурсов из кэша. Это делается путем переопределения свойства XmlUrlResolver.Credentials и метода XmlUrlResolver.GetEntity.
class XmlCachingResolver : XmlUrlResolver
{
bool enableHttpCaching;
ICredentials credentials;
//resolve resources from cache (if possible) when enableHttpCaching is set to true
//resolve resources from source when enableHttpcaching is set to false
public XmlCachingResolver(bool enableHttpCaching)
{
this.enableHttpCaching = enableHttpCaching;
}
public override ICredentials Credentials
{
set
{
credentials = value;
base.Credentials = value;
}
}
public override object GetEntity(Uri absoluteUri, string role, Type ofObjectToReturn)
{
if (absoluteUri == null)
{
throw new ArgumentNullException("absoluteUri");
}
//resolve resources from cache (if possible)
if (absoluteUri.Scheme == "http" && enableHttpCaching && (ofObjectToReturn == null || ofObjectToReturn == typeof(Stream)))
{
WebRequest webReq = WebRequest.Create(absoluteUri);
webReq.CachePolicy = new HttpRequestCachePolicy(HttpRequestCacheLevel.Default);
if (credentials != null)
{
webReq.Credentials = credentials;
}
WebResponse resp = webReq.GetResponse();
return resp.GetResponseStream();
}
//otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
else
{
return base.GetEntity(absoluteUri, role, ofObjectToReturn);
}
}
}
Class XmlCachingResolver
Inherits XmlUrlResolver
Dim enableHttpCaching As Boolean
Public Shadows Credentials As ICredentials
'resolve resources from cache (if possible) when enableHttpCaching is set to true
'resolve resources from source when enableHttpcaching is set to false
Public Sub New(ByVal enableHttpCaching As Boolean)
Me.enableHttpCaching = enableHttpCaching
End Sub
Public Shadows Function GetEntity(ByVal absoluteUri As Uri, ByVal role As String, ByVal returnType As Type) As Object
If absoluteUri = Nothing Then
Throw New ArgumentNullException("absoluteUri")
End If
'resolve resources from cache (if possible)
If absoluteUri.Scheme = "http" And enableHttpCaching And (returnType Is GetType(Nullable) Or returnType Is GetType(Stream)) Then
Dim webReq As WebRequest = WebRequest.Create(absoluteUri)
webReq.CachePolicy = New HttpRequestCachePolicy(HttpRequestCacheLevel.Default)
If Not (Credentials Is Nothing) Then
webReq.Credentials = Credentials
End If
Dim resp As WebResponse = webReq.GetResponse()
Return resp.GetResponseStream()
'otherwise use the default behavior of the XmlUrlResolver class (resolve resources from source)
Else
Return MyBase.GetEntity(absoluteUri, role, returnType)
End If
End Function
End Class
Поведение кэширования класса XmlCachingResolver
реализуется в методе GetEntity
. Это делается путем создания новых WebRequest и HttpRequestCachePolicy объектов. Объект HttpRequestCachePolicy создается с помощью элемента Default перечисления HttpRequestCacheLevel.
Свойство CachePolicy объекта WebRequest задано с объектом HttpRequestCachePolicy.
Экземпляр класса XmlCachingResolver
создается с помощью Boolean
enableHttpCaching
. Если для этого значения задано значение true
, экземпляр разрешает ресурс из кэша по умолчанию, если это возможно. Если для enableHttpCaching
задано значение false
, экземпляр использует поведение по умолчанию и разрешает ресурсы из источника.
Ескерім
В этом примере используется расширяемость классов XML в .NET Framework. Другие классы можно расширить и настроить в соответствии с потребностями конкретного приложения.
Xml |
Инициализирует новый экземпляр класса XmlUrlResolver. |
Cache |
Возвращает или задает политику кэша для базового объекта WebRequest. |
Credentials |
Задает учетные данные, используемые для проверки подлинности веб-запросов. |
Proxy |
Возвращает или задает сетевой прокси-сервер для базового объекта WebRequest. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
Get |
Сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс. |
Get |
Асинхронно сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс. |
Get |
Асинхронно сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс. (Унаследовано от XmlResolver) |
Get |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
Get |
Возвращает Type текущего экземпляра. (Унаследовано от Object) |
Memberwise |
Создает неглубокую копию текущей Object. (Унаследовано от Object) |
Resolve |
Разрешает абсолютный URI из базовых и относительных URI. |
Resolve |
При переопределении в производном классе разрешает абсолютный URI из базовых и относительных URI. (Унаследовано от XmlResolver) |
Supports |
Позволяет сопоставителям возвращать типы, отличные от Stream. (Унаследовано от XmlResolver) |
To |
Возвращает строку, представляющую текущий объект. (Унаследовано от Object) |
Өнім | Нұсқалар |
---|---|
.NET | Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 2.0, 2.1 |
- XML-документы и данных
.NET кері байланысы
.NET — бастапқы коды ашық жоба. Пікір қалдыру үшін сілтемені таңдаңыз: