我已使用以下代码发送了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);
任何帮助都将不胜感激。
答案 0 :(得分:1)
UploadData
不在无限循环中,它是Blocking
不同。
UploadData正在阻塞,它正在等到另一方(在这种情况下是服务器端http://localhost:51378
)将响应它。
由于以下问题和其他原因,可能会发生长时间阻止:
来自MSDN的WebClient.UploadData备注
UploadData方法在没有的情况下将数据内容发送到服务器 编码吧。此方法在上载数据时阻止。接着说 在等待服务器的响应时执行,使用其中一个 UploadDataAsync方法。
我强烈建议您使用适当的UploadData
try..catch clause