使用Facebook C#SDK for Fan Page自定义iFrame选项卡

时间:2011-03-11 18:50:34

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

我正在尝试在粉丝页面上创建一个简单的iFrame自定义标签。我正在使用Facebook C# SDK,我需要读取Facebook传递给我的iFrame页面的signed_request值。

我可以打印signed_request编码的值,所以我知道它出现了,但是当我尝试使用Facebook C#SDK解码它时,我收到了一个错误。我正在使用.NET 4.0和动态。

这是我的代码:

signedRequestString包含来自Facebook的signed_pa​​ram的Request值。

var result = FacebookSignedRequest.Parse(FacebookContext.Current.AppSecret, signedRequestString);
dynamic signedRequestJson = result.Data;
dynamic page = signedRequestJson.page;

我收到错误:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: Cannot perform runtime binding on a null reference    at CallSite.Target(Closure , CallSite , Object )    at System.Dynamic.UpdateDelegates.UpdateAndExecute1[T0,TRet](CallSite site, T0 arg0)    at DecodeSignedRequest(String signedRequestString)

任何想法为什么我会得到一个空?我正确地设置了我的web.config(我想),但我猜我错过了初始化步骤等等。

3 个答案:

答案 0 :(得分:3)

使用FacebookWebContext.Current.SignedRequest更容易。 然后,您可以访问有关该页面的信息:

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 :(得分:0)

您需要先将signedRequestJson对象转换为IDictionary键/值对,然后才能获取页面数据。

您可以按照以下方式执行此操作:

dynamic signedRequestJson = result.Data;
var RawRequestData = (IDictionary<string, object>)signedRequestJson;

然后,您可以使用JSON密钥访问页面数据(假设您引用了Newtonsoft.Json.dll库):

Facebook.JsonObject RawPageData = (Facebook.JsonObject)RawRequestData["page"];
currentFacebookPageID = (string)RawPageData["id"];

希望这有帮助。

答案 2 :(得分:0)

我正在使用它。我希望它适合你:

Facebook.FacebookConfigurationSection s = new FacebookConfigurationSection();
s.AppId = 'ApplicationID';
s.AppSecret = 'ApplicationSecret';
FacebookWebContext wc = new FacebookWebContext(s);
dynamic da = wc.SignedRequest.Data;
dynamic page = da.page;
string pageid = page.id;
bool isLiked = page.liked;
bool isAdmin = page.admin;