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 请求。通过这种方式做事,我错过了什么吗?我当然在性能方面获得了很多!