0

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

4

1 回答 1

1

你在做什么看起来完全没问题。您调用对PrepareAuthorizedRequest传出的 HTTP 请求进行签名,然后您可以自由地异步或以其他方式将其发送出去,而无需进一步考虑 OAuth 特定的问题。

当您提到“验证响应不为空”等时,我不确定您指的是什么代码。但是在我所做的测试中,有时响应(在异常和非异常中) case) 可以为空。我不记得具体是什么时候。

于 2010-12-18T01:39:01.520 回答