簡體   English   中英

查詢中包含URL的WCF數據服務

[英]WCF Data Services with URL in Query

我正在通過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只是一個數字,但是對於Google和雅虎,其中UserId是一個URL,我無法讓它匹配 - 即使我知道URL是相同的,它總是會得到0結果。 我正在逃避URL(否則查詢會失敗),但我怎么能讓它找到它應該的匹配?

=====編輯

我知道我可以通過首先查詢提供程序來獲得它 - 在ToPro()然后在ProviderUserId上查詢 - 然后它不必編碼,因為它不會通過DataServices發送。 但是我不喜歡將每條記錄拉回到整個線路的單一提供商的想法,只是作為一種解決方法。

為了解決這個問題,我設置了一個服務操作來處理這個問題,但我仍然很好奇這個問題是否有“真正的”答案。

[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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM