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

HttpWebRequest AsyncCallback参数问题

你需要添加ID作为一个查询字符串参数到HttpWebRequest(你没有做任何与qstr3设置后)。

当你设置ContentType和ContentLength时,你没有传递任何实际的内容。

但是让我担心的是并行地发射(潜在地)许多简单的异步httpwebrequest。如果它们的数量相当大,我预计不好的事情会开始发生。

考虑这是否是正确的方法。1.php可以修改为一次接受多个ID吗?

为什么你不能传递参数给你的函数?您使用request作为BeginGetResponse的第二个参数-您实际上可以传递任何自定义对象而不是它,保留您的参数和对请求的引用,并将result.AsyncState转换为该对象类型,而不是转换为HttpWebRequest

但实际上,如果你需要发送你的id,你需要在你的异步request.BeginGetResponse操作之前获得请求流-例如,从你的请求中获得GetRequestStream()并在那里写数据(或再次作为异步操作)。