0

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

明確にするために、これは私にとっては問題なく機能していますが、サンプルの実装では、明確な結果を達成しないクラスがさらにいくつか使用されています。彼らは、コンテンツエンコーディングが奇妙に設定されていないことを確認し、応答がnullでないことを確認しているように見えます。どちらも、私のコードはおそらくとにかく例外をスローします。意図したサーバーからの応答を検証するようなことは何もしていないようです。これは、HTTPSリクエストであるため、私の特定のシナリオではとにかくありそうにありません。私はこのように物事を行うことによって何かを逃していますか?私は確かにパフォーマンスの面で多くを獲得しています!

4

1 に答える 1

1

あなたがしていることは完全にうまく見えます。発信HTTPリクエストに署名するための呼び出しPrepareAuthorizedRequest。その後、OAuth固有の懸念事項をさらに考慮することなく、非同期またはその他の方法で自由に送信できます。

「応答がnullでないことを確認する」などと言ったときに、どのコードを参照しているかわかりません。しかし、私が行ったテストでは、応答(例外と非例外の両方)が発生する場合があります。ケース)はnullにすることができます。いつだったか正確には覚えていません。

于 2010-12-18T01:39:01.520 に答える