【发布时间】:2014-01-15 15:50:45
【问题描述】:
如何使用 Async / Await 模式转换我的传统 HttpWebRequest “POST”调用,在这里我附上我当前的代码,请任何人帮助我使用 Windows phone 8 的 Async / Await 模式转换此代码。
public void GetEnvironmentVariables(Action<Credentials> getResultCallback, Action<Exception> getErrorCallback)
{
CredentialsCallback = getResultCallback;
ErrorCallback = getErrorCallback;
var uri = new Uri(BaseUri);
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = "POST";
request.ContentType = "application/json";
var jsonObject = new JObject
{
new JProperty("apiKey",_api),
new JProperty("affiliateId",_affid),
};
var serializedResult = JsonConvert.SerializeObject(jsonObject);
byte[] requestBody = Encoding.UTF8.GetBytes(serializedResult);
request.BeginGetRequestStream(GetRequestStreamCallback, new object[] { request, requestBody });
}
private void GetRequestStreamCallback(IAsyncResult asynchronousResult)
{
var request = (HttpWebRequest)((object[])asynchronousResult.AsyncState)[0];
using (var postStream = request.EndGetRequestStream(asynchronousResult))
{
var byteArray = (byte[])((object[])asynchronousResult.AsyncState)[1];
// Write to the request stream.
postStream.Write(byteArray, 0, byteArray.Length);
}
request.BeginGetResponse(GetResponseCallback, request);
}
private void GetResponseCallback(IAsyncResult asynchronousResult)
{
var request = (HttpWebRequest)asynchronousResult.AsyncState;
try
{
var response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
if (response != null)
{
var reader = new StreamReader(response.GetResponseStream());
string responseString = reader.ReadToEnd();
Credentails = JsonConvert.DeserializeObject<Credentials>(responseString);
if (Credentails != null && string.IsNullOrEmpty(Credentails.Err))
CredentialsCallback(Credentails);
else
{
if (Credentails != null)
ErrorCallback(new Exception(string.Format("Error Code : {0}", StorageCredentails.Err)));
}
}
}
catch (WebException we)
{
var reader = new StreamReader(we.Response.GetResponseStream());
string responseString = reader.ReadToEnd();
Debug.WriteLine(responseString);
ErrorCallback(we);
}
}
【问题讨论】:
-
What have you tried?您的代码遇到了什么困难? -
我是这个世界的新手,通过设置响应对象,我厌倦了使用“TaskCompletionSource”的实现。但这似乎是我想念的根源。我正在寻找一个有经验的人的完美实施,如果我得到这样的支持,这对像我这样的学生会有帮助。
-
不要犹豫,展示您目前拥有的代码。通过这种方式,人们将能够看到并解释它的问题所在,并希望为您提供更好的选择。但恐怕现在您正在要求其他人为您完成这项工作,而 StackOverflow 不适合此类请求。
-
不,我不是这个意思。正如我所说,我对这个环境很陌生,对语言特性知之甚少。如果我将代码放在这里,阅读代码的人可能会误解,因为我不知道如何解释我的真正问题。如果您有耐心帮助我,请给我指导方针,否则请忽略我的问题。
标签: c# windows-phone-8 async-await c#-5.0