解析Facebook login_success URL

时间:2011-07-03 10:40:40

标签: c# facebook facebook-c#-sdk

在我通过Facebook验证后,我收到了这个网址:

 http://www.facebook.com/connect/login_success.html
 #access_token=161713100507627|2.R8bXAgr9wdiQYWJgVx_yPg__.3600.1301475600-100001169602345|sY-
fl-62kCSgcn1pgiv2fYsltHE
 &expires_in=5996

如何解析此URL并获取访问令牌?

我尝试了request["access_token"],但它无效:我无法在#之后得到任何内容。

生成网址的代码

 string[] extendedPermissions = new[] { "publish_stream", "offline_access" };

        var oauth = new FacebookOAuthClient { AppId = current.AppId, RedirectUri = urlli };


        appId = current.AppId;
        var parameters = new Dictionary<string, object>
                    {
                        { "response_type", "token" },
                        { "display", "popup" }

                    };




        if (extendedPermissions != null && extendedPermissions.Length > 0)
        {
            var scope = new StringBuilder();
            scope.Append(string.Join(",", extendedPermissions));
            parameters["scope"] = scope.ToString();
        }

        var loginUrl = oauth.GetLoginUrl(parameters);

2 个答案:

答案 0 :(得分:0)

好的,我想我有足够的信息可以回答你。我猜你是在浏览器中使用Silverlight(因为这是我所知道的唯一一个像这样返回的平台)。

您需要做的是在安装了浏览器应用程序的Silverlight的同一网站上设置一个页面(您没有选择必须这样做)。原因是在标签之后不会通知您任何内容。从本质上讲,页面的作用是向Silverlight应用程序执行ScriptNotify,从JavaScript传递完整的URL(它将包含主题标签内容 - “#access_token = ...”内容。)

您还需要在Facebook应用程序中设置(我认为您也可以在代码中的设置中进行调用)以指向此页面。在您的Silverlight中,您只需处理“ScriptNotify”事件即可。请参阅here for the sample web pagehere for the sample Silverlight code

还有一件事,如果我正确猜到(并解决了)您的问题,请将我标记为答案。

答案 1 :(得分:0)

我使用我的WPF应用点击http://facebooksdk.codeplex.com/discussions/261528 - 这也可能适用于Silverlight。这是Facebook行为的变化与WPF(和Silverlight?)WebBrowser控件的问题之间的相互作用。通过切换到WinForms,我能够解决我的问题。该链接讨论了一种替代方法,该方法保留在WPF中但添加了对FacebookOAuthClient.ExchangeCodeForAccessToken()的调用。