得到IObservable< string>对象作为POST请求的响应,我如何才能获得字符串本身

本文关键字:字符串 响应 string IObservable 对象 请求 POST 得到 | 更新日期: 2023-09-27 17:50:49

我使用以下代码片段发送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呢?

我知道这是一个有点傻的问题,但我也会感谢任何链接到网站,我可以阅读更多关于这一点。

得到IObservable< string>对象作为POST请求的响应,我如何才能获得字符串本身

你不需要使用IObservable。我想你从使用响应式扩展的人那里得到了这段代码。这背后的想法是,你订阅了这个"事件",每次发出请求时,都会向你发送一个字符串。有关响应式扩展的更多信息,请参阅最新的响应式扩展(Rx)教程的答案

如果你不想使用响应式扩展,我建议使用RestSharp。这是一个很好的库,也可以与Windows Phone一起使用,你可以找到许多关于如何使用它的示例。