Facebook标签,发现是否喜欢

时间:2011-10-31 10:53:31

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

我有以下代码来检查用户是否喜欢我的标签:

        protected bool IsPageLiked()
    {
        try
        {
            var current = ConfigurationManager.GetSection("facebookSettings")
                          as IFacebookApplication;
            dynamic data = FacebookWebContext.Current.SignedRequest.Data;

            if (data.page != null)
            {
                var pageId = (String)data.page.id;
                var isUserAdmin = (Boolean)data.page.admin;
                var userLikesPage = (Boolean)data.page.liked;
                if (userLikesPage)
                    return true;
            }
        }
        catch (Exception ex)
        {
            return false;
        }
        return false;
    }

最初加载标签时,此功能正常。 但是,如果我在选项卡中更改页面后尝试调用相同的代码,则会出现以下错误:

{“前提条件失败:!String.IsNullOrEmpty(signedRequestValue)”}

有没有办法让我的代码在第一页之后工作?

我知道我可以检查第一页上是否喜欢该标签,并将其放入会话对象或其他内容,但我不想这样做。

我的应用程序本身就是MVC 3

由于

修改

我认为发生的事情是当我更改页面时(我正在使用RedirectToAction方法),它正在丢失signed_request查询字符串,因此我得到了错误。

修改2

毕竟不确定上面是什么,因为我在初始页面上看不到任何查询字符串值?它仍然无法获得签名请求。

看起来signed_request是一个表单对象(Request.Form [“signed_request”]返回初始页面中的字符串,但不返回第二页)。

1 个答案:

答案 0 :(得分:1)

页面标签基本上只是您网页上iframe中的应用,就像您已经注意到已签名的请求在页面加载时张贴到标签页。

当您在标签中更改页面时,外部Facebook框架没有重新加载,因此signed_request不会重新发布到您的标签页,这就是您无法再次访问它的原因。

您需要将signed_request从一个页面传递给下一个页面,或者确保所有链接都使用target =“_ top”,以便每次重新加载整个页面并且您仍然可以获得POST。

要定义您希望加载标签的页面,可以在标签的网址中使用名为app_data的其他参数,例如

http://www.facebook.com/MY_PAGE?sk=app_MY_APP_ID&app_data=A_STRING_OF_DATA

然后,您的标签会在signed_request中收到此标签,您可以抓住它并使用它来确定标签需要显示的页面。