Для чего используются свойства BaseAddress и QueryString WebClient? - PullRequest
3 голосов
/ 27 сентября 2011

Я пытаюсь создать экземпляр WebClient следующим образом:

WebClient wc = new WebClient();
wc.BaseAddress = "http://contoso.com";
wc.QueryString.Add("ctNm", "some name");
wc.QueryString.Add("port", "title");
wc.QueryString.Add("rx", "1");
wc.QueryString.Add("own", "userx");
wc.QueryString.Add("asOfDt", "02/23/2011");

Поскольку я уже определил все, что мне нужно для моего веб-запроса (я имею в виду, у меня определены BaseAddress и QueryString), я подумал, чтособирался найти какой-то метод, который позволил бы мне выдать запрос без передачи каких-либо дополнительных параметров.К моему удивлению, все методы в WebClient (DownloadData, DownloadFile, DownloadString, OpenRead и т. Д.) Требуют Uri или строку в качестве параметра.

Какой смысл иметь свойства BaseAddress и QueryString, к которым вы можете добавить значения, если вам все еще нужно создать URL-адрес вручную, чтобы выполнить запрос?Я использую не тот инструмент здесь?Должен ли я использовать WebRequest вместо?

Ответы [ 2 ]

4 голосов
/ 27 сентября 2011

Если вы хотите получить доступ к http://contoso.com/test.html с этими параметрами запроса, вы можете написать:

wc.DownloadString("test.html");

Другими словами, BaseAddress и QueryString лучше всего использовать при загрузке несколькихстраницы с того же сайта.

В противном случае создайте свой собственный абсолютный Uri, используя классы Uri или UriBuilder, и передайте полностью сформированный Uri на DownloadString (или любой метод, который вам нужно вызвать).

1 голос
/ 27 сентября 2011

С http://msdn.microsoft.com/en-us/library/system.net.webclient.baseaddress.aspx:

Свойство BaseAddress содержит базовый URI, объединенный с относительный адрес. Когда вы вызываете метод, который загружает или скачивает данных, объект WebClient объединяет этот базовый URI с относительным адрес, который вы указываете в вызове метода. Если вы укажете абсолют URI, WebClient не использует значение свойства BaseAddress.

Таким образом, BaseAddress выполняет в WebClient общие функции, которые он должен выполнять для всех методов, которые могут быть вызваны. Несколько методов могут вызываться друг за другом, повторно используя этот единственный настроенный экземпляр веб-клиента.

Сам метод отвечает за указание пути к его выполнению относительно BaseAddress или абсолютного пути, переопределяющего предварительно настроенный BaseAddress.

Звучит логично для меня: -)

...