我正在通过 WCF 数据服务设置 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;
}
它对 twitter 非常有用,因为ProviderUseId
它只是一个数字,但对于 google 和 yahoo 来说,它UserId
是一个 URL,我无法让它匹配 - 即使我知道 URL 相同,它总是会得到 0 个结果。我正在转义 URL(否则查询会失败),但我怎样才能让它找到应该的匹配项?
=====编辑
我知道我可以通过首先查询提供者来使其工作 - 执行 ToList() 然后查询 ProviderUserId - 然后它不必编码,因为它不会通过 DataServices 发送。但我不喜欢将所有记录拉回单个提供商的网络中作为解决方法的想法。