HttpWebRequest AsyncCallback参数问题
本文关键字:问题 参数 AsyncCallback HttpWebRequest | 更新日期: 2023-09-27 18:03:50
当我尝试在第一个方法中单击to按钮时,它在for循环中创建异步http请求。但是,我不能将参数传递给异步回调函数。我想用POST方法在for循环中发送id
void Button3Click(object sender, EventArgs e)
{
for(int i = Convert.ToInt32(startno3.Text); i<Convert.ToInt32(endno3.Text); i++) {
ASCIIEncoding encoding=new ASCIIEncoding();
string postData="id=1";
qstr3 = encoding.GetBytes(postData);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/ornek/1.php");
if(key1.Text!="") {
request.Headers.Add("Cookie", "PHPSESSID=" + key1.Text);
}
request.Method = "POST";
request.ContentType="application/x-www-form-urlencoded";
request.ContentLength = data.Length;
IAsyncResult asyncResult = request.BeginGetResponse( new AsyncCallback(EndScanFeeds), request);
}
}
public void EndScanFeeds(IAsyncResult result) {
HttpWebRequest request = null;
HttpWebResponse response = null;
Stream stream = null;
StreamReader streamReader = null;
try {
request = (HttpWebRequest)result.AsyncState;
response = (HttpWebResponse)request.EndGetResponse(result);
stream = response.GetResponseStream();
streamReader = new StreamReader(stream);
string feedData = streamReader.ReadToEnd();
response.Close();
stream.Close();
streamReader.Close();
MessageBox.Show(feedData);
}
catch(Exception ex) {
throw(ex);
}
finally {
if(response != null)
response.Close();
if(stream != null)
stream.Close();
if(streamReader != null)
streamReader.Close();
}
} c
你需要添加ID作为一个查询字符串参数到HttpWebRequest(你没有做任何与qstr3设置后)。
当你设置ContentType和ContentLength时,你没有传递任何实际的内容。
但是让我担心的是并行地发射(潜在地)许多简单的异步httpwebrequest。如果它们的数量相当大,我预计不好的事情会开始发生。
考虑这是否是正确的方法。1.php可以修改为一次接受多个ID吗?
为什么你不能传递参数给你的函数?您使用request
作为BeginGetResponse
的第二个参数-您实际上可以传递任何自定义对象而不是它,保留您的参数和对请求的引用,并将result.AsyncState
转换为该对象类型,而不是转换为HttpWebRequest
。
但实际上,如果你需要发送你的id,你需要在你的异步request.BeginGetResponse
操作之前获得请求流-例如,从你的请求中获得GetRequestStream()
并在那里写数据(或再次作为异步操作)。