使用访问令牌连接到新的Facebook客户端

时间:2011-04-15 09:49:58

标签: c# asp.net facebook facebook-c#-sdk

经过大约一周的搜索,尝试和失败。我终于从代码中获得了正确的Facebook访问令牌。

但是现在我还有另外一个问题。使用该访问令牌获取用户数据。每次我使用令牌获取数据时,它都返回异常!String.IsNullOrEmpty(accessToken).

完整堆栈跟踪:


Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Diagnostics.Contracts.__ContractsRuntime+ContractException: Precondition failed: !string.IsNullOrEmpty(accessToken)

来源错误:

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

堆栈追踪:

[ContractException: Precondition failed: !string.IsNullOrEmpty(accessToken)]
   Facebook.Web.FacebookWebClient..ctor(String accessToken) +137
   Facebook_Photo_App._Default.Button1_Click(Object sender, EventArgs e) in Default.aspx.cs:105
   System.EventHandler.Invoke(Object sender, EventArgs e) +0
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1

我的代码:

在页面加载时生成访问权限:

 string code;
            code = Request.QueryString["code"];
        //TextBox1.Text = code;

        string token;

        string url = "https://graph.facebook.com/oauth/access_token?client_id=XXX&redirect_uri=http://apps.facebook.com/dutch-vegas/&client_secret=XXX&code=" + code;

        WebRequest request = WebRequest.Create(url);
        WebResponse response = request.GetResponse();
        StreamReader reader = new StreamReader(response.GetResponseStream());
        token = reader.ReadToEnd();
        string decodedtoken = token;

        TextBox1.Text = decodedtoken;

        decodedtoken = decodedtoken.Replace("access_token=", "");

        int start = decodedtoken.IndexOf("&");
        int count = decodedtoken.Length - decodedtoken.IndexOf("&");
        decodedtoken = decodedtoken.Remove(start, count);

在按钮上实现访问令牌以获取用户数据

var client = new FacebookClient(decodedtoken);


        dynamic me = client.Get("me");
        string email = me.email;
        string firstname = me.first_name;
        string lastname = me.last_name;
        string birthday = me.birthday;

        TextBox1.Text = email;

一切似乎都在正确生成。即使在获得错误的访问令牌(这比它想象的要短很多)大约一个星期之后,我也把它排序了。现在我被卡住了。

请帮帮我。我已经搜索了无数个小时来尝试解决这个问题。

我也注意到在C#sdk for facebook中你可以为

创建多个实例

FacebookWebClient, FacebookApp, FacebookClient。

我使用哪一个,这可能是我问题的一部分吗?

非常感谢提前。 Ĵ

1 个答案:

答案 0 :(得分:0)

Facebook SDK中有一些实用程序类可以为您处理访问令牌。几周前,当我看着它们时,它们有点片状。

我最终使用了javascript代码 - http://www.patternwebsolutions.com/2011/03/07/facebooksdk-connect-mvc3/