一旦UploadValuesCompleted
事件被触发,是否可以获取在请求中上传的NameValueCollection
?
我希望有可能重新发送请求的副本。
我正在做这样的事情:
NameValueCollection data = new NameValueCollection();
data.Add("myParam", "myValue");
WC.Headers["Content-Type"] = "application/x-www-form-urlencoded";
WC.UploadValuesAsync(Url, "POST", data);
答案 0 :(得分:4)
如果您将数据传递给它,您的事件处理程序可以访问data
,例如使用闭包语义或实例变量。
看起来像这样:
WebClient client = new WebClient();
var data = GetPostData();
client.UploadValuesCompleted += (sender, e) => { Console.WriteLine(data); }
UploadValuesAsync("url", "POST", data);
事件处理程序现在可以访问data
。
答案 1 :(得分:1)
为此,我扩展了WebClient
以同时提供请求Url和发送的值。
class APIRequest : WebClient
{
public Uri Url { get; private set; }
public NameValueCollection Data { get; private set; }
public void sendRequest(Uri url, NameValueCollection data)
{
Url = url;
Data = data;
Headers["Content-Type"] = "application/x-www-form-urlencoded";
UploadValuesAsync(url, "POST", data);
}
}
它还要求我对其他代码进行了更改,我以前使用单个WebClient来处理许多请求,现在我每个都使用一个。