检查C#.NET中是否存在HttpWebRequest

时间:2011-10-13 21:03:49

标签: c# asp.net multithreading httpwebrequest

我的代码后面声明了以下内容:

  private HttpWebRequest req = null;
  private IAsyncResult result = null;

我的代码后面有一个名为btnUpload的按钮点击事件:

 req = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", pageUrl.ToString(), arguments));
 req.Method = "GET";

 // Start the asynchronous request.
 result = (IAsyncResult)req.BeginGetResponse(new AsyncCallback(RespCallback), null);

然后我在同一页面和后面的代码中有另一个按钮点击事件,名为btnSubmit,其中包含:

 if (req == null)

req始终为null。如何访问req和结果变量?

3 个答案:

答案 0 :(得分:2)

这是因为您的Page对象实例在多个HTTP请求中不存在。此行为是在ASP.NET中设计的。

您应该查看PageAsyncTask课程。这个blog post可能对学习如何使用它很有用。

答案 1 :(得分:1)

如果您正在执行异步请求,则只能访问回调方法RespCallback中的结果。您还需要将原始请求传入异步调用以获取响应。请看以下示例:

protected void Page_Load(object sender, EventArgs e)
        {
            HttpWebRequest req;

            req = (HttpWebRequest)WebRequest.Create(string.Format("{0}{1}", pageUrl.ToString(), arguments));
            req.Method = "GET";

            // pass in request so we can retrieve it later
            req.BeginGetResponse(new AsyncCallback(RespCallback), req); 

        }

        void RespCallback(IAsyncResult result)
        {
            HttpWebRequest originalRequest = (HttpWebRequest)result.AsyncState;
            HttpWebResponse response = (HttpWebResponse)originalRequest.EndGetResponse(result);

            // response.GetResponseStream()
        }

答案 2 :(得分:0)

web(编程)是无状态的(除了由viewstate维护的一些人工webforms UI状态),这意味着如果你在btnUpload_Click中实例化对象,那么它将不会出现在另一个按钮事件中。所以你要么需要重新创建对象等,例如两个按钮的事件中的HttpWebRequest或存储btnUpload_Click的结果(例如在Session中)并从btnSubmit_click访问它。同时google for ASP.net页面生命周期。
希望这有帮助