DotNetOpenAuth и асинхронный веб-запрос (BeginGetResponse)

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


person Chris Moschini    schedule 16.12.2010    source источник


Ответы (1)


То, что ты делаешь, выглядит совершенно нормально. Ваш вызов PrepareAuthorizedRequest подписывает исходящий HTTP-запрос, и вы можете отправить его асинхронно или иным образом после этого, не задумываясь о проблемах, связанных с OAuth.

Я не уверен, какой код вы имеете в виду, когда упоминаете «проверить, что ответ не равен нулю» и т. д. случай) может быть нулевым. Хотя я точно не помню, когда.

person Andrew Arnott    schedule 18.12.2010