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

标签 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在我给出的示例中,我得到的是 IObservable<string> 。所以基本上,我怎样才能得到我的string从中?

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

最佳答案

您不必使用 IObservable。我想您是从与 Reactive Extensions 一起工作的人那里获得此代码的。这背后的想法是,您订阅这个“事件”,并且每次发出请求时都会向您发送一个字符串。有关响应式(Reactive)扩展的更多信息,请参阅此问题的答案 Reactive Extension (Rx) tutorial that is up to date

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

关于c# - 获取 IObservable<string> 对象作为对 POST 请求的响应,如何获取字符串本身?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14192943/

相关文章:

c# - 表达式树嵌套 wheres

c# - 如何从 Windows Mobile 10 中的后台任务读取短信

c# - WP7/8 在使用 C# 的事件后动态更改 InputScope

windows-phone-8.1 - UWP 数字密码框

c# - 企业库 5.0 强行关闭事件连接

c# - AAD : How uniquely identify users in a Web API?

sqlite - Windows 手机 : How do I exclude columns/properties in SQLite-net?

c# - AudioPlaybackAgent 中的计时器

c# - 在 FlipView 中使用 ScrollViewer

c# - Linq 查询以选择最高记录