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