查询URL的WCF数据服务

本文关键字:数据 服务 WCF URL 查询 | 更新日期: 2023-09-27 17:49:16

我正在WCF数据服务上设置OAuth。在尝试查询数据源以获取提供程序用户键时,我遇到了一个问题,因为在某些情况下,键是URL。例如,对于google 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只是一个数字,但对于谷歌和雅虎,UserId是一个URL,我无法得到它匹配-它总是出现0结果,即使我知道URL是相同的。我正在转义URL(否则查询将失败),但是我如何使它找到匹配呢?

= = = = =编辑

我知道我可以让它首先通过查询提供程序来工作-做一个ToList(),然后查询ProviderUserId -然后它不必被编码,因为它不会通过DataServices发送。但是我不喜欢把每条记录都拉回来给一个单一的提供者作为一个解决方案。

查询URL的WCF数据服务

为了推进这个过程,我设置了一个Service Operation来处理这个问题,但是我仍然很好奇这个问题是否有一个"真正的"答案。

[WebGet]
public IEnumerable<OAuthMembership> GetOAuthUser(string provider, 
                                                 string providerUserId)
{
    providerUserId = Uri.UnescapeDataString(providerUserId);
    using (var db = new WebsiteMembershipEntities())
    {
        return db.OAuthMemberships.Where(o=>o.Provider == provider && 
                                            o.ProviderUserId == providerUserId)
                 .ToList();
    }
}