Ағылшын тілінде оқу

Бөлісу құралы:


XmlUrlResolver Класс

Определение

Разрешает внешние XML-ресурсы с именем универсального идентификатора ресурса (URI).

public class XmlUrlResolver : System.Xml.XmlResolver
Наследование
XmlUrlResolver

Примеры

В следующем примере создается 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);

Комментарии

XmlUrlResolver используется для разрешения внешних XML-ресурсов, таких как сущности, определения типов документов (DTD) или схемы. Он также используется для обработки и импорта элементов, найденных в таблицах стилей XSL или схемах XSD.

XmlUrlResolver — это сопоставитель по умолчанию для всех классов в пространстве имен System.Xml. Он поддерживает протоколы file:// и http:// и запросы из класса WebRequest.

Маңызды

XmlUrlResolver объекты могут содержать конфиденциальную информацию, например учетные данные пользователя. При кэшировании XmlUrlResolver объектов следует тщательно следить за тем, чтобы объекты XmlUrlResolver не передавалися в ненадежный компонент.

Разрешение DTD

Если средство чтения 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

Поведение по умолчанию класса 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);
        }
    }
}

Поведение кэширования класса XmlCachingResolver реализуется в методе GetEntity. Это делается путем создания новых WebRequest и HttpRequestCachePolicy объектов. Объект HttpRequestCachePolicy создается с помощью элемента Default перечисления HttpRequestCacheLevel.

Свойство CachePolicy объекта WebRequest задано с объектом HttpRequestCachePolicy.

Экземпляр класса XmlCachingResolver создается с помощью BooleanenableHttpCaching. Если для этого значения задано значение true, экземпляр разрешает ресурс из кэша по умолчанию, если это возможно. Если для enableHttpCaching задано значение false, экземпляр использует поведение по умолчанию и разрешает ресурсы из источника.

Ескерім

В этом примере используется расширяемость классов XML в .NET Framework. Другие классы можно расширить и настроить в соответствии с потребностями конкретного приложения.

Конструкторы

XmlUrlResolver()

Инициализирует новый экземпляр класса XmlUrlResolver.

Свойства

CachePolicy

Возвращает или задает политику кэша для базового объекта WebRequest.

Credentials

Задает учетные данные, используемые для проверки подлинности веб-запросов.

Proxy

Возвращает или задает сетевой прокси-сервер для базового объекта WebRequest.

Методы

Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetEntity(Uri, String, Type)

Сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс.

GetEntityAsync(Uri, String, Type)

Асинхронно сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс.

GetEntityAsync(Uri, String, Type)

Асинхронно сопоставляет универсальный код ресурса (URI) с объектом, содержащим фактический ресурс.

(Унаследовано от XmlResolver)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
ResolveUri(Uri, String)

Разрешает абсолютный URI из базовых и относительных URI.

ResolveUri(Uri, String)

При переопределении в производном классе разрешает абсолютный URI из базовых и относительных URI.

(Унаследовано от XmlResolver)
SupportsType(Uri, Type)

Позволяет сопоставителям возвращать типы, отличные от Stream.

(Унаследовано от XmlResolver)
ToString()

Возвращает строку, представляющую текущий объект.

(Унаследовано от 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

См. также раздел