Примеры 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. Я что-то упускаю, делая вещи таким образом? Я, конечно, много выигрываю в производительности!