我用下面的代码发送了一个POST请求:
var postDatax = new Dictionary<string, string>
{
{ "korefor", "new" },
{ "korename", "Initial" },
{ "set_instant", "true" },
{ "set_engine", "google" },
{ "set_language", "en" },
{ "set_location", "uk" },
{ "set_mobile", "false" },
{ "set_email", "example@mediaworks.co.uk" },
{ "set_mainurl", "mediaworks.co.uk" },
{ "set_compurls", "google.com, yahoo.com" },
{ "koreforname", "Mediaworks" },
{ "koreforkeywords", "newcastle seo, mediaworks, orm" }
};
using (System.Net.WebClient wc = new System.Net.WebClient())
{
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
byte[] byteArrayx = System.Text.Encoding.ASCII.GetBytes(amend(postDatax));
byte[] byteResultx = wc.UploadData("http://localhost:51378", "POST", byteArrayx);
string responsex = Encoding.ASCII.GetString(byteResultx);
}
在运行和调试时,它会卡住并循环,直到超时并崩溃。我不确定为什么会这样。
修改功能:
private static string amend(Dictionary<string, string> postData)
{
string amended = "";
foreach (var item in postData)
{
amended += "&" + item.Key + "=" + item.Value;
}
return amended;
}
触发无限循环的行:
byte[] byteResultx = wc.UploadData("http://localhost:51378", "POST", byteArrayx);
UploadData
不在无限循环中,Blocking
是不同的。
UploadData正在阻塞,它正在等待另一方,即本场景中的服务器端http://localhost:51378
,将响应它。
长时间阻塞可能由于以下问题和其他原因而发生:
- 当服务器忙于其他请求时。
- 服务器代码需要很长时间来处理您的请求。
- 本地或远程防火墙问题。
WebClient。UploadData备注from MSDN
UploadData方法将数据的内容发送到服务器编码。此方法在上传数据时阻塞。继续在等待服务器响应时执行,请使用UploadDataAsync方法。
我强烈建议您用适当的try..catch clause
UploadData
。