【发布时间】:2012-03-26 17:51:58
【问题描述】:
我有点困惑。我正在尝试以异步方式发布到我的 Web 服务,理想情况下我想启动请求,在 UI 上显示加载微调器,然后当异步请求完成时处理响应,如果有一个错误,则显示错误,或对结果执行其他操作。
这是我的代码,我在这里调用请求并传入一些数据。
private void SignInExecute()
{
if (Username == null || Password == null)
{
LoginOutput = "Please provide a username or password.";
}
else
{
this.webService.SendLoginRequest("http://localhost:3000/client_sessions", "username=" + Username + "&password=" + Password);
}
}
这是实际的网络请求代码:
public void SendLoginRequest(string url, string postdata)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "application/json";
byte[] byteArray = Encoding.UTF8.GetBytes(postdata);
request.CookieContainer = new CookieContainer();
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
dataStream.Write(byteArray, 0, byteArray.Length);
dataStream.Close();
((HttpWebRequest)request).KeepAlive = false;
request.BeginGetResponse(new AsyncCallback(GetLoginResponseCallback), request);
}
private static void GetLoginResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
Console.WriteLine(responseString);
// Close the stream object
streamResponse.Close();
streamRead.Close();
response.Close();
}
总结一下。我希望能够将响应返回给最初调用 Web 请求开始的对象。有什么帮助吗?
【问题讨论】:
-
Winforms/webforms/silverlight/什么?
-
WPF,不觉得太重要了。更新了标签以反映它。
标签: c# wpf asynchronous