WebClient.UploadValuesAsync - 获取请求中发送的值

时间:2012-12-01 14:25:00

标签: c# webclient

一旦UploadValuesCompleted事件被触发,是否可以获取在请求中上传的NameValueCollection

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

我正在做这样的事情:

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

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

2 个答案:

答案 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来处理许多请求,现在我每个都使用一个。