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

时间:2015-05-27 07:52:11

标签: 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 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 - 这是Nexmo API

感谢。

1 个答案:

答案 0 :(得分:5)

PHeiberg一样,WebClient在请求完成后清除Headers,因此再次添加它们会使其正常工作。

在回答关于创建新对象的个人偏好的LokiSinclair评论时,我必须说如果您使用使用Cookie和其他相关功能的继承WebClient,这不是一个好习惯您需要在请求之间共享。