首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpWebRequest AsyncCallback参数问题

HttpWebRequest AsyncCallback参数问题
EN

Stack Overflow用户
提问于 2011-07-29 19:29:23
回答 2查看 1.1K关注 0票数 0

当我尝试在第一个方法中单击按钮时,它正在为loop.But创建异步http请求,我不能将参数传递给异步回调函数。我想做一些事情,我想使用POST方法在for循环中发送ID。

代码语言:javascript
复制
    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
EN

回答 2

Stack Overflow用户

发布于 2011-07-29 19:36:01

您需要将ID作为查询字符串参数添加到HttpWebRequest中(在设置qstr3之后,您不会对它做任何操作)。

当您设置ContentType和ContentLength时,您并没有向它传递任何实际内容。

但是让我担心的是并行地触发(潜在地)许多简单的异步HttpWebRequests。如果它们的数量很多,我预计会有不好的事情发生。

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

票数 0
EN

Stack Overflow用户

发布于 2011-07-29 19:54:43

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6872435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档