4

WCF Data Services を介した OAuth の設定に取り組んでいます。キーが URL である場合があるため、プロバイダー ユーザー キーのデータ ソースを照会しようとすると問題が発生します。たとえば、グーグルの場合https://www.google.com/accounts/o8/id?id=AItOawnDT8v-6rdRI221piLFbOBT1m3EYTizmDQ

私は次の機能を持っています:

public override int GetUserIdFromOAuth(string provider, string providerUserId)
{
    var encodedUserId = Uri.EscapeDataString(providerUserId);
    var user = service.OAuthMemberships
                      .Where(o => o.Provider == provider &&
                                  o.ProviderUserId == encodedUserId)
                      .SingleOrDefault();
    if (user == null)
        return -1;

    return user.UserId;
}

ProviderUseIdは単なる数字であるため、Twitterではうまく機能しますが、URLがURLであるGoogleとYahooUserIdでは、一致させることができません.URLが同じであることを知っていても、常に0の結果が表示されます. URL をエスケープしています (そうしないとクエリが失敗します) が、どうすれば一致するものを見つけることができますか?

=====編集

ToList() を実行し、次に ProviderUserId をクエリすると、DataServices 経由で送信されないため、エンコードする必要はありません。しかし、回避策としてネットワークを介して単一のプロバイダーのすべてのレコードを引き戻すという考えは好きではありません。

4

1 に答える 1