DotNetOpenAuth示例不包含异步执行调用的示例。这是我的实施。我想知道我做错了什么。
public static IAsyncResult BeginGetFromGoogle(string accessToken)
{
var oauthConsumer = new WebConsumer(ServiceDescription, TokenManager);
var request = oauthConsumer.PrepareAuthorizedRequest(googleEndpoint, accessToken, OAuthOpenIdHelper.MakeParameters("key", googleApiKey));
return request.BeginGetResponse(new AsyncCallback(endGetFromGoogle), new GetFromGoogleContext { Request = request });
}
protected static void endGetFromGoogle(IAsyncResult result)
{
var context = (GetFromGoogleContext)result.AsyncState;
WebResponse response = context.Request.EndResponse(result);
string body = new StreamReader(response.GetResponseStream()).ReadToEnd();
var serializer = new JavaScriptSerializer();
// serializer.Deserialize<something>(); // do something with the data
}
protected class GetFromGoogleContext
{
public HttpWebRequest Request;
}
很明显,这对我来说很好,但是样本中的实现使用了一些其他类,这些类对我没有任何明确的结果;他们似乎检查内容编码没有设置奇怪,并验证响应不为空,我的代码可能会抛出异常。他们似乎没有做任何事情,例如验证来自预期服务器的响应,这在我的特定场景中是不可能的,因为它是一个HTTPS请求。通过这种方式做事我错过了什么吗?我在性能方面肯定获得了很多!
答案 0 :(得分:1)
你在做什么看起来很好。您对PrepareAuthorizedRequest
的呼叫会签署传出的HTTP请求,您可以在此之后异步或以其他方式发送它,而无需进一步考虑OAuth特定的问题。
当你提到“验证响应不为空”等时,我不确定你指的是什么代码。但是在我做过的测试中,有时候响应(在例外和非例外情况)可以为null。我不记得确切的时间。