Добавить в цитаты Настройки чтения

Страница 493 из 502

В классе Uri определяется несколько конструкторов. Ниже приведены наиболее часто используемые конструкторы этого класса.

<b>public Uri(string uriString)</b>

<b>public Uri(Uri baseUri, string relativeUri)</b>

В первой форме конструктора объект класса Uri создается по идентификатору URI, заданному в виде строки uriString. А во второй форме конструктора он создается по относительному URI, заданному в виде строки relativeUri относительно абсолютного URI, обозначаемого в виде объекта baseUri типа Uri. Абсолютный URI определяет полный адрес URI, а относительный URI — только путь к искомому ресурсу.

В классе Uri определяются многие поля, свойства и методы, оказывающие помощь в управлении идентификаторами URI или в получении доступа к различным частям URI. Особый интерес представляют приведенные ниже свойства.

Свойство - Описание

public string Host { get; } - Получает имя сервера

public string LocalPath { get; } - Получает локальный путь к файлу

public string PathAndQuery { get; } - Получает абсолютный путь и строку запроса

public int Port { get; } - Получает номер порта для указанного протокола. Так, для протокола HTTP номер порта равен 80

public string Query { get; } - Получает строку запроса

public string Scheme { get; } - Получает протокол

Перечисленные выше свойства полезны для разделения URI на составные части. Применение этих свойств демонстрируется в приведенном ниже примере программы.

<b>// Пример применения свойств из класса Uri.</b>

<b>using System;</b>

<b>using System.Net;</b>

<b>class UriDemo {</b>

<b>  static void Main() {</b>

<b>    Uri sample = new Uri(&quot;http://HerbSchildt.com/somefile.txt?SomeQuery&quot;);</b>

<b>    Console.WriteLine(&quot;Хост: &quot; + sample.Host);</b>

<b>    Console.WriteLine(&quot;Порт: &quot; + sample.Port);</b>

<b>    Console.WriteLine(&quot;Протокол: &quot; + sample.Scheme);</b>

<b>    Console.WriteLine(&quot;Локальный путь: 11 + sample. LocalPath&quot;) ;</b>

<b>    Console.WriteLine(&quot;Запрос: &quot; + sample.Query);</b>

<b>    Console.WriteLine(&quot;Путь и запрос: &quot; + sample.PathAndQuery);</b>

<b>  }</b>

<b>}</b>

Эта программа дает следующий результат.

<b>Хост: herbschildt.com</b>

<b>Порт: 80</b>

<b>Протокол: http</b>

<b>Локальный путь: 11 + sample. LocalPath</b>

<b>Запрос: ?SomeQuery</b>

<b>Путь и запрос: /somefile.txt?SomeQuery</b>

Доступ к дополнительной информации, получаемой в ответ по протоколу HTTP

С помощью сетевых средств, имеющихся в классе HttpWebResponse, можно получить доступ к другой информации, помимо содержимого указываемого ресурса. К этой информации, в частности, относится время последней модификации ресурса, а также имя сервера. Она оказывается доступной с помощью различных свойств, связанных с получаемым ответом. Все эти свойства, включая и те что, определены в классе WebResponse, сведены в табл. 26.5. В приведенных далее примерах программ демонстрируется применение этих свойств на практике.

Таблица 26.5. Свойства, определенные в классе HttpWebResponse

Свойство - Описание

public string CharacterSet { get; } - Получает название используемого набора символов

public string ContentEncoding { get; } - Получает название схемы кодирования

public long ContentLength { get; } - Получает длину принимаемого содержимого. Если она недоступна, свойство имеет значение -1

public string ContentType { get; } - Получает описание содержимого

public CookieCollection Cookies { get; set; } - Получает или устанавливает список cookie-наборов, присоединяемых к ответу

public WebHeaderCollection Headers! get; } - Получает коллекцию заголовков, присоединяемых к ответу

public bool IsFromCache { get; } - Принимает логическое значение true, если запрос получен из кеша. А если запрос доставлен по сети, то принимает логическое значение false

public bool IsMutuallyAuthenticated { get; } - Принимает логическое значение true, если клиент и сервер опознают друг друга, а иначе — принимает логическое значение false

public DateTime LastModified { get; } - Получает время последней модификации ресурса

public string Method { get; } - Получает строку, которая задает способ ответа

public Version ProtocolVersion { get; } - Получает объект типа Version, описывающий версию протокола HTTP, используемую в транзакции

public Uri ReponseUri { get; } - Получает URI, по которому был сформирован ответ. Этот идентификатор может отличаться от запрашиваемого, если ответ был переадресован по другому URI

public string Server { get; } - Получает строку, обозначающую имя сервера

public HttpStatusCode StatusCode { get; } - Получает объект типа HttpStatusCode, описывающий состояние транзакции

public string StatusDescription { get; } - Получает строку, обозначающую состояние транзакции в удобочитаемой форме

Для доступа к заголовку с информацией, получаемой в ответ по протоколу HTTP, служит свойство Headers, определенное в классе HttpWebResponse.

<b>public WebHeaderCollection Headers{ get; }</b>

Заголовок протокола HTTP состоит из пар "имя-значение", представленных строками. Каждая пара "имя-значение" хранится в коллекции класса WebHeaderCollection. Эта коллекция специально предназначена для хранения пар "имя-значение" и применяется аналогично любой другой коллекции (подробнее об этом см. в главе 25). Строковый массив имен может быть получен из свойства AllKeys, а отдельные значения — по соответствующему имени при вызове метода GetValues(). Этот метод возвращает массив строк, содержащий значения, связанные с заголовком, передаваемым в качестве аргумента. Метод GetValues() перегружается, чтобы принять числовой индекс или имя заголовка.