2010-12-16 3 views
0

Les exemples DotNetOpenAuth n'incluent pas d'exemple pour effectuer un appel de manière asynchrone. Voici ma mise en œuvre. J'aimerais savoir si je fais quelque chose de mal.DotNetOpenAuth et Async WebRequest (BeginGetResponse)

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; 
} 

Pour être clair, cela fonctionne très bien pour moi, mais la mise en œuvre dans les échantillons utilise un ou deux autres classes qui ne tendent pas de résultat clair pour moi; ils semblent vérifier que le codage de contenu n'est pas paramétré de manière étrange, et vérifier que la réponse n'est pas nulle, les deux desquels mon code devrait vraisemblablement lancer une exception de toute façon. Ils ne semblent pas faire quoi que ce soit comme valider la réponse provenait du serveur prévu, ce qui serait peu probable dans mon cas particulier puisqu'il s'agit d'une demande HTTPS. Est-ce que je rate quelque chose en faisant les choses de cette façon? Je gagne certainement beaucoup en termes de performance!

Répondre

1

Ce que vous faites est très bien. Votre appel à PrepareAuthorizedRequest signe la requête HTTP sortante et vous êtes libre de l'envoyer de manière asynchrone ou autre après cela sans plus réfléchir aux problèmes spécifiques à OAuth. Je ne suis pas sûr de quel code vous faites référence quand vous mentionnez "vérifier la réponse n'est pas nulle", etc. Mais dans le test que j'ai fait, il y a des moments où la réponse (à la fois dans l'exception et cas de non-exception) peut être nul. Je ne me souviens pas exactement quand, cependant.

+0

Merci beaucoup, Andrew! –