您可以拥有一个行为类似于 WebClient 的自定义子类,但会像这样添加所需的怪异:需要重写 GetWebRequest 方法以考虑我们的新属性 NameLessParameter 以构建新的 Uri。
public class SpecializedWebClient : WebClient
{
// set if you need Namelessvalue as
// your first QueryParam
public string NameLessParameter { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
var u = new UriBuilder(address);
if (!String.IsNullOrEmpty(NameLessParameter))
{
string origQuery = String.Empty;
if (!String.IsNullOrEmpty(u.Query))
{
// strip off the first ? and add &
origQuery = "&" + u.Query.Substring(1);
}
u.Query = NameLessParameter + origQuery;
}
return base.GetWebRequest(u.Uri);
}
}
用法
var sc = new SpecializedWebClient();
sc.QueryString.Add("foo", "42");
sc.QueryString.Add("bar", "pi");
sc.NameLessParameter=@"c:\bofh\removeuser.sh";
string sdta = sc.DownloadString(@"http://www.example.com");