Код состояния: ProtocolError
На веб-сайте по адресу www.McGraw-Hill. com отсутствует раздел moonrocket, и поэтому он не найден по указанному URI, что и подтверждает приведенный выше результат.
Ради краткости и ясности в программах большинства примеров из этой главы отсутствует полноценная обработка исключений. Но в реальных приложениях она просто необходима.
Класс Uri
Как следует из табл. 26.1, метод WebRequest.Create()
Uri
, определенного в пространстве имен System
. Класс Uri
инкапсулирует идентификатор URL. Используя класс Uri
, можно сформировать URI, чтобы затем передать этот идентификатор методу Create()
. Кроме того, идентификатор URI можно разделить на части. Для выполнения многих простых операций в Интернете класс Uri
малопригоден. Тем не менее он может оказаться весьма полезным в более сложных ситуациях сетевого подключения к Интернету.В классе Uri
public Uri(string uriString)
public Uri(Uri baseUri, string relativeUri)
В первой форме конструктора объект класса Uri
Uri
. Абсолютный URI определяет полный адрес URI, а относительный URI — только путь к искомому ресурсу.В классе Uri определяются многие поля, свойства и методы, оказывающие помощь в управлении идентификаторами URI или в получении доступа к различным частям URI. Особый интерес представляют приведенные ниже свойства.
Свойство -
Описаниеpublic string Host { get; } -
Получает имя сервераpublic string LocalPath { get; } -
Получает локальный путь к файлуpublic string PathAndQuery { get; } -
Получает абсолютный путь и строку запросаpublic int Port { get; } -
Получает номер порта для указанного протокола. Так, для протокола HTTP номер порта равен 80public string Query { get; } -
Получает строку запросаpublic string Scheme { get; } -
Получает протоколПеречисленные выше свойства полезны для разделения URI на составные части. Применение этих свойств демонстрируется в приведенном ниже примере программы.
// Пример применения свойств из класса Uri.
using System;
using System.Net;
class UriDemo {
static void Main() {
Uri sample = new Uri("http://HerbSchildt.com/somefile.txt?SomeQuery");
Console.WriteLine("Хост: " + sample.Host);
Console.WriteLine("Порт: " + sample.Port);
Console.WriteLine("Протокол: " + sample.Scheme);
Console.WriteLine("Локальный путь: 11 + sample. LocalPath") ;
Console.WriteLine("Запрос: " + sample.Query);
Console.WriteLine("Путь и запрос: " + sample.PathAndQuery);
}
}
Эта программа дает следующий результат.
Хост: herbschildt.com
Порт: 80
Протокол: http
Локальный путь: 11 + sample. LocalPath
Запрос: ?SomeQuery
Путь и запрос: /somefile.txt?SomeQuery
Доступ к дополнительной информации, получаемой в ответ по протоколу HTTP
С помощью сетевых средств, имеющихся в классе HttpWebResponse
WebResponse
, сведены в табл. 26.5. В приведенных далее примерах программ демонстрируется применение этих свойств на практике.Таблица 26.5. Свойства, определенные в классе HttpWebResponse
Свойство -
Описание