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

本文关键字:Facebook 客户端 访问令牌 连接 | 更新日期: 2023-09-27 17:50:11

我终于得到了从代码生成的正确的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);

在按钮上实现Access令牌获取用户数据

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中,Facebook可以为FacebookWebClient, FacebookApp, FacebookClient创建多个实例。

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

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

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

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