我正在尝试在粉丝页面上创建一个简单的iFrame自定义标签。我正在使用Facebook C# SDK,我需要读取Facebook传递给我的iFrame页面的signed_request值。
我可以打印signed_request编码的值,所以我知道它出现了,但是当我尝试使用Facebook C#SDK解码它时,我收到了一个错误。我正在使用.NET 4.0和动态。
这是我的代码:
signedRequestString包含来自Facebook的signed_param的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(我想),但我猜我错过了初始化步骤等等。
答案 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;