将Facebook Requests 2.0与C#SDK一起使用

时间:2011-05-09 02:36:31

标签: facebook facebook-c#-sdk

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

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

http://developers.facebook.com/blog/post/464

注意:

该链接演示了如何设置书签计数并将其删除。我希望能够对SDK做同样的事情,我们将不胜感激。

1 个答案:

答案 0 :(得分:6)

要做到这一点,首先需要获取应用的访问令牌:

    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来获取应用程序access_token,因为(从版本5.011 RC1开始)SDK会抛出SerializationException。似乎SDK期待来自Facebook的JSON响应,但Facebook以以下形式返回访问令牌:access_token = some_value(这是无效的JSON)。
  • HttpHelpers.HttpGetRequest只使用.Net的HttpWebRequest。您也可以使用WebClient,但无论您选择什么,您最终都希望发出此http请求:

    获取https://graph.facebook.com/oauth/access_token?client_id=YOUR_APP_ID&client_secret=YOUR_APP_SECRET&grant_type=client_credentials HTTP / 1.1 主持人:graph.facebook.com

既然您有一个方法来检索应用程序access_token,您可以按如下方式生成应用程序请求(此处我使用Facebook C#SDK):

public string GenerateAppRequest(string fbUserId) {
    var appAccessToken = GetAppAccessToken();
    var client = new FacebookClient(appAccessToken);
    dynamic parameters = new ExpandoObject();
    parameters.message = "Test: Action is required";
    parameters.data = "Custom Data Here";

    string id = client.Post(String.Format("{0}/apprequests", fbUserId), parameters);
    return id;
}

同样,您可以按如下方式检索所有用户的应用请求: 注意:你可能不想返回“动态”,但为了简单起见,我在这里使用它。

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

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

我希望这会有所帮助。