我正在尝试使用HttpWebRequest.BeginGetRequestStream
方法。在我的方法中,我得到了一些Json
。我需要等待这个方法(HttpWebRequest.BeginGetRequestStream)
的结束来分析我的Json。
这是我的代码:
private string API_Query(string url)
{
HttpWebRequest requete = (HttpWebRequest)HttpWebRequest.Create(url);
requete.Method = "POST";
requete.ContentType = "application/x-www-form-urlencoded";
requete.BeginGetRequestStream(DebutReponse, requete);//wait the end of this method
//analyse the json here
return null;
}
问题是我不知道如何等待方法结束。我尝试了不同的东西,比如Task和Thread,但我不确定如何正确地做到这一点。
感谢您的帮助。
答案 0 :(得分:2)
问题在于我不知道如何等待方法结束。
有很多方法可以做到这一点。因为在我看来你想同步调用请求,我建议你简单地调用GetResponseStream
:
private string ApiQuery(string url)
{
HttpWebRequest requete = (HttpWebRequest)HttpWebRequest.Create(url);
requete.Method = "POST";
requete.ContentType = "application/x-www-form-urlencoded";
using (var requestStream = requete.GetRequestStream())
{
// Write to request stream
}
using (var responseStream = requete.GetResponse())
{
// Read the respone stream, parsing out your JSON.
}
}
修改:
正如您在评论中提到的,这是一个Silverlight项目。这意味着您没有HttpWebRequest
的同步版本。相反,您可以使用WebClient
:
var webClient = new WebClient()
webClient.OpenReadCompleted += OnUploadCompleted;
webClient.OpenReadAsync(url, data);
private void OnUploadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error != null)
{
// Error, do something useful
return;
}
using (var responseStream = e.Result)
{
byte[] data = (byte[]) e.UserState;
// Read response from stream.
}
}