2012-12-01 82 views
2

一旦UploadValuesCompleted事件觸發,是否有可能獲取在請求中上傳的NameValueCollectionWebClient.UploadValuesAsync - 獲取請求中發送的值

我想重發一個請求的副本的可能性。

我做這樣的事情:

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

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

回答

4

如果您向其傳遞數據(例如使用閉包語義或實例變量),則您的事件處理程序可以訪問data

它看起來是這樣的:

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

的事件處理程序現在可以訪問data

+0

您是指的是有關'WebClient'的原始問題,還是我的答案顯示了我的擴展名'APIRequest'?如果後者那麼這就是我所做的。 – Drahcir

+0

參考原始問題。試圖概括你的答案,因爲不需要繼承。 – usr

+0

好的,您可以發佈一些示例代碼嗎?我不確定我是否理解你的答案。 – Drahcir

2

要做到這一點,我已經擴展了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的許多要求,我現在正在使用爲每個。