2010-12-16 4 views
0

DotNetOpenAuth-Beispiele enthalten kein Beispiel zum asynchronen Ausführen eines Aufrufs. Hier ist meine Implementierung. Ich würde gerne wissen, ob ich etwas falsch mache.DotNetOpenAuth und 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; 
} 

Um klar zu sein, das für mich funktioniert gut, aber die Umsetzung in den Proben verwendet ein paar weitere Klassen, die kein klares Ergebnis für mich nicht erreichen können; Sie scheinen zu überprüfen, dass die Inhaltscodierung nicht merkwürdig festgelegt ist, und überprüfen, ob die Antwort nicht null ist, und beide würden vermutlich ohnehin eine Ausnahme auslösen. Sie scheinen nichts zu tun, um zu validieren, dass die Antwort vom beabsichtigten Server kam, was in meinem speziellen Szenario sowieso unwahrscheinlich wäre, da es sich um eine HTTPS-Anfrage handelt. Verpasse ich etwas, indem ich die Dinge so mache? Ich bin auf jeden Fall sehr leistungsfähig!

Antwort

1

Was Sie tun, sieht völlig in Ordnung. Ihr Anruf an PrepareAuthorizedRequest signiert die ausgehende HTTP-Anfrage, und Sie können sie ohne weitere Überlegungen zu OAuth-spezifischen Problemen asynchron oder anderweitig senden.

Ich bin mir nicht sicher, welchen Code Sie beziehen, wenn Sie "überprüfen, die Antwort ist nicht null", usw. Aber in den Tests, die ich getan habe, gibt es Zeiten, wenn Antwort (beide in der Ausnahme und Nicht-Ausnahme-Fall) kann null sein. Ich erinnere mich nicht genau wann.

+0

Vielen Dank, Andrew! –