获取IObservable <string>对象作为对POST请求的响应,如何获取字符串本身?</string>

时间:2013-01-07 09:19:12

标签: c# windows-phone windows-phone-8

我正在使用此代码段发送POST请求:

public IObservable<string> BeginPost(Uri uri, string postData)
{
    var request = HttpWebRequest.CreateHttp(uri);
    request.Method = "POST";
    request.ContentType = "application/x-www-form-urlencoded";

    var fetchRequestStream = Observable.FromAsyncPattern<Stream>(request.BeginGetRequestStream, request.EndGetRequestStream);
    var fetchResponse = Observable.FromAsyncPattern<WebResponse>(request.BeginGetResponse, request.EndGetResponse);
    return fetchRequestStream().SelectMany(stream =>
    {
        using (var writer = new StreamWriter(stream)) writer.Write(postData);
        return fetchResponse();
    }).Select(result =>
    {
        var response = (HttpWebResponse)result;
        string s = "";
        if (response.StatusCode == HttpStatusCode.OK)
        {
            using (var reader = new StreamReader(response.GetResponseStream())) 
                s = reader.ReadToEnd();
        }
        return s;
    });
}

我是C#的新手,我真的不明白为什么我必须使用这个IObservable界面。我试图在互联网上找到有关它的任何信息,但我不能。

我真正需要的是作为string从webservice获得响应,在我给出的示例中,我得到的是IObservable<string>。基本上,我怎样才能从中获取string

我知道这是一个有点愚蠢的问题,但我也很感激任何链接到我可以阅读更多相关信息的网站。

1 个答案:

答案 0 :(得分:4)

您不必使用IObservable。我想你从使用Reactive Extensions的人那里得到了这段代码。这背后的想法是,您订阅此“事件”,每次发出请求时,都会向您发送一个字符串。有关Reactive Extensions的详细信息,请参阅此问题的答案Reactive Extension (Rx) tutorial that is up to date

如果您不想使用Reactive Extensions,我建议您使用RestSharp。这是一个很好的库,也适用于Windows Phone,你可以找到很多关于如何使用它的样本。