2

触发UploadValuesCompleted事件后,是否可以获取NameValueCollection请求中上传的事件?

我希望能够重新发送请求的副本。

我正在做这样的事情:

NameValueCollection data = new NameValueCollection();
data.Add("myParam", "myValue");

WC.Headers["Content-Type"] = "application/x-www-form-urlencoded";
WC.UploadValuesAsync(Url, "POST", data);
4

2 回答 2

5

如果您将数据传递给它,您的事件处理程序就可以访问data,例如通过使用闭包语义或实例变量。

它可能看起来像这样:

WebClient client = new WebClient();
var data = GetPostData();
client.UploadValuesCompleted += (sender, e) => { Console.WriteLine(data); };
UploadValuesAsync("url", "POST", data);

事件处理程序现在可以访问data.

于 2012-12-01T15:15:57.083 回答
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 处理许多请求,现在我为每个请求使用一个。

于 2012-12-01T14:55:48.397 回答