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 経由で送信されないため、エンコードする必要はありません。しかし、回避策としてネットワークを介して単一のプロバイダーのすべてのレコードを引き戻すという考えは好きではありません。