DotNetOpenAuth和Async WebRequest(BeginGetResponse)

时间:2010-12-16 10:54:54

标签: dotnetopenauth iasyncresult

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

1 个答案:

答案 0 :(得分:1)

你在做什么看起来很好。您对PrepareAuthorizedRequest的呼叫会签署传出的HTTP请求,您可以在此之后异步或以其他方式发送它,而无需进一步考虑OAuth特定的问题。

当你提到“验证响应不为空”等时,我不确定你指的是什么代码。但是在我做过的测试中,有时候响应(在例外和非例外情况)可以为null。我不记得确切的时间。