什么是WebClient的BaseAddress和QueryString属性用于?

时间:2011-09-26 21:36:18

标签: c# webclient webrequest

我正在尝试实例化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");

由于我已经定义了我的Web请求所需的一切(我的意思是,我已经定义了BaseAddress和QueryString),我以为我会找到某种方法来允许我发出请求而不传递任何额外的参数。令我惊讶的是,WebClientDownloadDataDownloadFileDownloadStringOpenRead等中的所有方法都需要Uri或字符串作为参数。

如果您仍需要手动构造URL以发出请求,那么拥有可以添加值的BaseAddress和QueryString属性有什么意义?我在这里使用了错误的工具吗?我应该使用WebRequest吗?

2 个答案:

答案 0 :(得分:4)

如果您希望使用这些查询参数访问http://contoso.com/test.html,可以写:

wc.DownloadString("test.html");

换句话说,当您从同一网站下载多个网页时,最好使用BaseAddressQueryString

否则,使用UriUriBuilder类构建您自己的绝对Uri,并将完全形成的Uri传递给DownloadString(或者您需要调用的任何方法)。

答案 1 :(得分:1)

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

  

BaseAddress属性包含与a组合的基URI   相对地址。当您调用上传或下载的方法时   数据,WebClient对象将此基URI与相对URI组合在一起   您在方法调用中指定的地址。如果指定绝对值   URI,WebClient不使用BaseAddress属性值。

因此,BaseAddress正在WebClient上执行泛型,它应该为可以调用的所有方法执行。可以在彼此重新使用此单个一次性配置的Web客户端实例后调用多个方法。

方法本身负责提供相对于BaseAddress的执行路径,或覆盖预先配置的BaseAddress的绝对路径。

听起来很合乎逻辑: - )