} catch(IOException exc) {
Console.WriteLine('Ошибка ввода-вывода: ' + exc.Message);
} catch(System.Security.SecurityException exc) {
Console.WriteLine('Исключение в связи с нарушением безопасности: ' + exc.Message);
} catch(InvalidOperationException exc) {
Console.WriteLine('Недопустимая операция: ' + exc.Message);
}
}
}
Теперь перехватываются все исключения, которые могут быть сгенерированы сетевыми методами. Так, если изменить вызов метода Create () следующим образом:
WebRequest.Create('http://www.McGraw- Hill.com/moonrocket');
а затем перекомпилировать и еще раз выполнить программу, то в результате может быть выдано приведенное ниже сообщение об ошибке.
Сетевая ошибка: Удаленный сервер возвратил ошибку: (404) Не найден.
Код состояния: ProtocolError
На веб-сайте по адресу www.McGraw-Hill. com отсутствует раздел moonrocket, и поэтому он не найден по указанному URI, что и подтверждает приведенный выше результат.
Ради краткости и ясности в программах большинства примеров из этой главы отсутствует полноценная обработка исключений. Но в реальных приложениях она просто необходима.
Класс Uri
Как следует из табл. 26.1, метод WebRequest. Create () существует в двух вариантах. В одном варианте он принимает идентификатор URI в виде строки. Именно этот вариант и был использован в предьтдугцих примерах программ. А во втором варианте этот метод принимает идентификатор URI в виде экземпляра объекта класса Uri, определенного в пространстве имен System. Класс Uri инкапсулирует идентификатор URL Используя класс Uri, можно сформировать URI, чтобы затем передать этот идентификатор методу Create (). Кроме того, идентификатор URI можно разделить на части. Для выполнения многих простых операций в Интернете класс Uri малопригоден. Тем не менее он может оказаться весьма полезным в более сложных ситуациях сетевого подключения к Интернету.
В классе Uri определяется несколько конструкторов. Ниже приведены наиболее часто используемые конструкторы этого класса.
public Uri(string
public 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 на составные части. Применение этих свойств демонстрируется в приведенном ниже примере программы.
// Пример применения свойств из класса Uri.
using System; using System.Net;
class UriDemo {
static void Main() {
Uri sample = new Uri('http://HerbSchildt.com/somefile.txt? SomeQuery');