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

C# 检查.NET中是否存在HttpWebRequest,c#,asp.net,multithreading,httpwebrequest,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"; // St

我在我的代码隐藏中声明了以下内容:

  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总是空的。如何访问req和result变量?

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


你应该看看这门课。这可能有助于了解如何使用它。

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

你应该看看这门课。这可能有助于了解如何使用它。

web(编程)是无状态的(除了一些由viewstate维护的人工webforms UI状态),这意味着如果您在btnUpload\u单击中实例化对象,它将不会在另一个按钮事件中出现。因此,您要么需要在两个按钮的事件中重新创建对象等,例如HttpWebRequest,要么将btnUpload\u单击的结果存储在某个位置(例如在会话中),然后从btnSubmit\u单击访问它。此外,谷歌还支持ASP.net页面生命周期。
希望这有帮助

web(编程)是无状态的(除了一些由viewstate维护的人工webforms UI状态),这意味着如果您在btnUpload\u单击中实例化对象,它将不会出现在另一个按钮事件中。因此,您要么需要在两个按钮的事件中重新创建对象等,例如HttpWebRequest,要么将btnUpload\u单击的结果存储在某个位置(例如在会话中),然后从btnSubmit\u单击访问它。此外,谷歌还支持ASP.net页面生命周期。

希望这对您有所帮助

如果您正在执行异步请求,您将只能在回调方法
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()
        }

如果正在执行异步请求,则只能通过回调方法
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()
        }

您实际上没有显示足够的代码,但是您所显示的看起来还不错。你确定没有在其中一个事件处理程序中将
req
重新声明为局部变量吗?@Jon Skeet我假设OP的程序是ASP.NET应用程序,因为“…单击同一页上的事件…”。是的,它是ASP.NET应用程序。你确实没有显示足够的代码,但显示的内容看起来不错。你确定没有在其中一个事件处理程序中将
req
重新声明为局部变量吗?@Jon Skeet我假设OP的程序是ASP.NET应用程序,因为“…单击同一页面上的事件…”。是的,它是ASP.NET应用程序,所以我有batchprocessor.aspx.cs页面和BGPbatchprocessor.aspx.cs页面。第一个页面是将异步请求发送到第二个页面。在你提到的博客中,我应该覆盖OnInit吗?我很困惑,所以我有一个batchprocessor.aspx.cs页面和一个BGPbatchprocessor.aspx.cs页面。第一个页面是将异步请求发送到第二个页面。在你提到的博客中,我应该覆盖OnInit吗?我很困惑。当我跟踪并在回调上设置断点时,它们永远不会被击中。为什么会发生这种情况呢?上面的代码肯定会像POST一样工作(在用有效的东西替换url逻辑之后)。您能否验证异步请求的页面/资源是否正在响应?我能想到的唯一一件事是,您的页面没有响应,或者您没有实际命中发出请求的代码块。上面的代码在有效页面和无效(404)页面上触发回调。当我跟踪并在回调上放置断点时,它们永远不会被击中。为什么会发生这种情况呢?上面的代码肯定会像POST一样工作(在用有效的东西替换url逻辑之后)。您能否验证异步请求的页面/资源是否正在响应?我能想到的唯一一件事是,您的页面没有响应,或者您没有实际命中发出请求的代码块。上面的代码在有效页面和无效(404)页面上触发回调。