我正在使用此代码段发送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
?
我知道这是一个有点愚蠢的问题,但我也很感激任何链接到我可以阅读更多相关信息的网站。
答案 0 :(得分:4)
您不必使用IObservable。我想你从使用Reactive Extensions的人那里得到了这段代码。这背后的想法是,您订阅此“事件”,每次发出请求时,都会向您发送一个字符串。有关Reactive Extensions的详细信息,请参阅此问题的答案Reactive Extension (Rx) tutorial that is up to date
如果您不想使用Reactive Extensions,我建议您使用RestSharp。这是一个很好的库,也适用于Windows Phone,你可以找到很多关于如何使用它的样本。