如何在我的Facebook应用程序页面中获取页面ID

时间:2011-04-06 13:36:07

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

我的应用程序作为选项卡托管在FaceBook中,我希望在添加应用程序以存储在我的逻辑中时获取页面ID。 如何获取页面ID,我知道它存储在URL中,但是当我尝试从页面作为服务器变量获取它时,即使我的应用程序配置为iFrame,我也没有得到它?但这是获取父URL的标准方法。

C#:

string t= request.serverVariables("HTTP_REFERER");

//doesn't get FB page url even if your app is configured as iframe ?!! @csharpsdk #facebook devs

任何帮助?

非常感谢。

3 个答案:

答案 0 :(得分:4)

我是这样做的:

if (FacebookWebContext.Current.SignedRequest != null)
{
  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;
  }
  else
  {
    // not on a page
  }
}

答案 1 :(得分:3)

页面ID未存储在URL中;它会在signed_request表单参数中发布到您的页面。有关详细信息,请参阅此Facebook开发人员blog post

您可以使用Facebook C#SDK中的FacebookSignedRequest.Parse方法来解析已签名的请求(使用您的应用秘密)。完成此操作后,您可以从Page JSON对象中提取页面ID,如下所示:

string signedRequest = Request.Form["signed_request"];

var DecodedSignedRequest = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, SignedRequest);
dynamic SignedRequestData = DecodedSignedRequest.Data;

var RawRequestData = (IDictionary<string, object>)SignedRequestData;

if (RawRequestData.ContainsKey("page") == true)
{
    Facebook.JsonObject RawPageData = (Facebook.JsonObject)RawRequestData["page"];
    if (RawPageData.ContainsKey("id") == true)
         currentFacebookPageID = (string)RawPageData["id"];
}

希望这有帮助。

答案 2 :(得分:1)

这里的解决方案与Andy Sinclairs在VB中的解决方案相同:

Dim pageId as Int64 = 0
Dim signed_request As String = Request.Form("signed_request")
Dim req = FacebookSignedRequest.Parse(AppSettings("FacebookSecret"), signed_request)
Dim data As IDictionary(Of String, Object) = req.Data
If data.ContainsKey("page") Then
    Dim RawPageData As Facebook.JsonObject = data("page")
    If RawPageData.ContainsKey("id") Then
      pageId = RawPageData("id")
    End If
End If