webclient的BaseAddress和QueryString属性是用来做什么的?

本文关键字:什么 属性 BaseAddress QueryString webclient | 更新日期: 2023-09-27 18:09:38

我试图实例化一个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定义),我想我要找到某种方法,将允许我发出请求而不传递任何额外的参数。令我惊讶的是,WebClient中的所有方法(DownloadData, DownloadFile, DownloadString, OpenRead等)都需要一个Uri或字符串作为参数。

有一个BaseAddress和一个QueryString属性,你可以添加值,如果你仍然需要手动构造URL来发出请求的点是什么?我用错工具了吗?我应该使用WebRequest代替吗?

webclient的BaseAddress和QueryString属性是用来做什么的?

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

wc.DownloadString("test.html");

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

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

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

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

所以BaseAddress在WebClient上做通用的事情,它应该为所有可以调用的方法做。多个方法可以互相调用,重用这个单一的一次性配置的web客户端实例。

方法本身负责给出相对于BaseAddress的执行路径,或者一个覆盖预配置的BaseAddress的绝对路径。

听起来合乎逻辑:-)