C# 通过wp7上的api登录mediawiki

C# 通过wp7上的api登录mediawiki,c#,windows-phone-7,class,mediawiki,webrequest,C#,Windows Phone 7,Class,Mediawiki,Webrequest,我正在尝试为wp7创建一个应用程序来登录维基百科并帮助翻译页面。 我在一开始就被卡住了,因为我无法让它通过mediawiki API登录。 代码的相关部分如下所示: data.Append("action=login&lgname" + HttpUtility.UrlEncode(textBox1.Text)); data.Append("&lgpassword=" + HttpUtility.UrlEncode(passwordBox1.Pass

我正在尝试为wp7创建一个应用程序来登录维基百科并帮助翻译页面。 我在一开始就被卡住了,因为我无法让它通过mediawiki API登录。 代码的相关部分如下所示:

        data.Append("action=login&lgname" + HttpUtility.UrlEncode(textBox1.Text));
        data.Append("&lgpassword=" + HttpUtility.UrlEncode(passwordBox1.Password));

        request.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback),request);
        request.BeginGetResponse(new AsyncCallback(GetResponseCallback), request);

        public void GetRequestStreamCallback(IAsyncResult asynchronousResult)
        {
           HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
           Stream postStream = request.EndGetRequestStream(asynchronousResult);
           byte[] byteData = UTF8Encoding.UTF8.GetBytes(data.ToString());
           postStream.Write(byteData, 0, data.Length);
           postStream.Close();
        }
        private static void GetResponseCallback(IAsyncResult asynchronousResult)
        {
           HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

           HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
           Stream streamResponse = response.GetResponseStream();
           StreamReader streamRead = new StreamReader(streamResponse);
           string responseString = streamRead.ReadToEnd();

           streamResponse.Close();
           streamRead.Close();

           response.Close();
    }
问题是:

在GetRequestStreamCallback上,我无法从主函数传递数据字符串。我该怎么做


在GetResponseCallback函数中,如何返回responsestring以便稍后输出?

您实际尝试的是两个异步操作,一个接一个-值得记住的是,
BeginXxx
方法在完成之前返回-因此在您的情况下,您请求将请求流写入,并立即请求响应,这样糟糕的事情就会接踵而至


可能值得一看其他示例,例如-中的示例,您会发现在完成对
EndGetRequestStream

返回的流的写入之前,通常不会调用
BeginGetResponse

这里我的代码与msdn文档中给出的begin方法类似。是否可以更改get方法的begin方法?Silverlight似乎认不出他们了,别管了。我会用另一种方法。检查api.php?action=query&format=xml&meta=userinfo,如果id=“0”,则在加载登录页面的应用程序中打开web浏览器。如果id是其他的,那么继续前进。无论如何,我以后可能不得不学习begin方法。