通过C#SDK使用Facebook Requests 2.0

通过C#SDK使用Facebook Requests 2.0,facebook,facebook-c#-sdk,Facebook,Facebook C# Sdk,我正在尝试用SDK更新书签计数字段,但尚未获得任何成功 有人能告诉我需要实例化哪些类来执行类似于以下链接的操作吗: 注: 该链接演示如何设置书签计数并将其删除。我希望能够对SDK执行同样的操作,如有任何帮助,将不胜感激。要执行此操作,首先需要获取应用程序的访问令牌: private string GetAppAccessToken() { var fbSettings = FacebookWebContext.Current.Settings; va

我正在尝试用SDK更新书签计数字段,但尚未获得任何成功

有人能告诉我需要实例化哪些类来执行类似于以下链接的操作吗:

注:


该链接演示如何设置书签计数并将其删除。我希望能够对SDK执行同样的操作,如有任何帮助,将不胜感激。

要执行此操作,首先需要获取应用程序的访问令牌:

    private string GetAppAccessToken() {

        var fbSettings = FacebookWebContext.Current.Settings;

        var accessTokenUrl = String.Format("{0}oauth/access_token?client_id={1}&client_secret={2}&grant_type=client_credentials",
            "https://graph.facebook.com/", fbSettings.AppId, fbSettings.AppSecret);

        // the response is in the form: access_token=foo
        var accessTokenKeyValue = HttpHelpers.HttpGetRequest(accessTokenUrl);
        return accessTokenKeyValue.Split('=')[1];
    }
关于上述方法,需要注意以下几点:

  • 我使用.Net HttpWebRequest而不是Facebook C#SDK来获取app access#u令牌,因为(从5.011 RC1版开始)SDK引发序列化异常。SDK似乎期待Facebook的JSON响应,但Facebook返回的访问令牌格式为:access_token=some_value(这不是有效的JSON)
  • HttpHelpers.HttpGetRequest只使用.Net的HttpWebRequest。您也可以使用WebClient,但无论您选择什么,您最终都希望发出以下http请求:

    获取HTTP/1.1 主持人:graph.facebook.com

现在,您已经有了检索app access#u令牌的方法,您可以生成如下的app请求(这里我使用的是Facebook C#SDK):

类似地,您可以按如下方式检索用户的所有应用程序请求: 注意:您可能不想返回“dynamic”,但为了简单起见,我在这里使用了它

   public dynamic GetAppRequests(string fbUserId) {
        var appAccessToken = GetAppAccessToken();
        var client = new FacebookClient(appAccessToken);

        dynamic result = client.Get(String.Format("{0}/apprequests", fbUserId));
        return result;    
    }

我希望这有帮助。

访问/apprequests假定用户已验证/安装了您的应用程序,对吗?我认为用户不必验证您的应用程序。根据Facebook的文档,你只需要你的应用访问令牌:Nope。使用我的应用程序访问令牌进行了测试,仍然获得“param ID中的所有用户必须已接受TOS”
   public dynamic GetAppRequests(string fbUserId) {
        var appAccessToken = GetAppAccessToken();
        var client = new FacebookClient(appAccessToken);

        dynamic result = client.Get(String.Format("{0}/apprequests", fbUserId));
        return result;    
    }