从HTTP响应中获取结果

本文关键字:获取 结果 响应 HTTP | 更新日期: 2023-09-27 18:09:33

我有以下c#类,它从Windows Phone向服务器发起HTTP请求:

public class Request
{
    public string data;
    public string result;
    public Request()
    {
    }
    public void doRequest(string parameters, string URL)
    {
        data = parameters;
        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(URL);
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), request);
    }
    public void GetRequestStreamCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest myRequest = (HttpWebRequest)callbackResult.AsyncState;
        Stream postStream = myRequest.EndGetRequestStream(callbackResult);
        byte[] byteArray = Encoding.UTF8.GetBytes(data);
        postStream.Write(byteArray, 0, byteArray.Length);
        postStream.Close();
        myRequest.BeginGetResponse(new AsyncCallback(GetResponsetStreamCallback), myRequest);
    }
    public void GetResponsetStreamCallback(IAsyncResult callbackResult)
    {
        HttpWebRequest request = (HttpWebRequest)callbackResult.AsyncState;
        HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(callbackResult);
        StreamReader httpWebStreamReader = new StreamReader(response.GetResponseStream());
        result = httpWebStreamReader.ReadToEnd();
    }

现在,在我的主类,我调用doRequest方法从Windows Phone做一个HTTP请求:

Request req = new Request();
req.doRequest("function=LogIn&username=" + username + "&password=" + password, "http://localhost:4000/Handler.ashx");

调用此方法时,我如何从服务器获得结果(结果变量),因为它是在GetResponsetStreamCallback方法中接收的,而不是在doRequest方法中?

从HTTP响应中获取结果

你有几种可能性。一种方法是定义property,使结果可以在外部访问。定义

public class Request
{
    public string Result
    {
      get{ 
           if(result != null && !string.IsNullOrEmpty(result))
                return result;
           return null;
         }
    }
  ...
}

您可以创建一个事件并让对象订阅它,这样您就可以在异步请求结束时注意到它们。或者使您的调用同步,这更容易一些,因为您不需要同步您的调用和来自其他对象的请求。