C# 重用WebClient对象以发送另一个HTTP请求

C# 重用WebClient对象以发送另一个HTTP请求,c#,.net,http,nexmo,C#,.net,Http,Nexmo,有人能解释我为什么不能重用WebClient对象来发送另一个HTTP POST请求吗 此代码不起作用: var client = new WebClient(); client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; string buySmsNumberResult = client.UploadString(ApiBuyUrl, apiBuyParams); //it work

有人能解释我为什么不能重用WebClient对象来发送另一个HTTP POST请求吗

此代码不起作用:

var client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string buySmsNumberResult = client.UploadString(ApiBuyUrl, apiBuyParams); //it works fine

//but when I try to send another HTTP POST with the existing WebClient object
string updateSmsNumberResult = client.UploadString(ApiUpdateNumberUrl, apiUpdateParams);
//it throws the exception
例外情况是:

远程服务器返回错误:(400)请求错误

但是,如果在第二次HTTP POST之前重新创建WebClient对象,它将不会出现任何问题

代码有效

var client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string buySmsNumberResult = client.UploadString(ApiBuyUrl, apiBuyParams); 

//recreating of the WebCLient object
client = new WebClient();
client.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
string updateSmsNumberResult= client.UploadString(ApiUpdateNumberUrl, apiUpdateParams);
我在那里使用的API-这是

谢谢。

如前所述,
WebClient
会在请求完成后清除
标题,因此再次添加它们将使其生效


在回答有关创建新对象的个人偏好的评论时,我必须指出,如果您使用继承的
WebClient
,它使用cookie和其他需要在请求之间共享的相关功能,那么这不是一个好的做法。

远程服务器是否会在您第一次请求时返回一些cookie?如果是这样,则可能是
WebClient
在其内部维护cookie容器,并导致第二个请求失败。就我个人而言,我总是创建一个新对象,因为您永远不知道在前一个对象上设置了什么。发布一个
=新的WebClient
-至少不会有任何未知的惊喜,比如这一个。我想知道为什么会发生这种情况-你能代理这两个请求(使用类似Runscope的东西)并将它们发送给我吗?我只是Nexmo的Tim。我遇到了同样的问题,
WebClient
会在每次请求后清除Header集合。因此,如果您重新添加Accept标头,则应该可以重用客户端实例。