Использование Facebook C # SDK для фан-страницы Пользовательские вкладки iFrame - PullRequest
0 голосов
/ 11 марта 2011

Я пытаюсь создать простую пользовательскую вкладку iFrame на своей фан-странице. Я использую Facebook C # SDK , и мне нужно прочитать значение signature_request, которое Facebook передает на мою страницу iFrame.

Я могу напечатать закодированное значение signature_request, чтобы знать, как оно отображается, но когда я пытаюсь декодировать его с помощью Facebook C # SDK, я получаю сообщение об ошибке. Я использую .NET 4.0 и динамику.

Вот мой код:

SignRequestString содержит значение Request с параметром подписанного_параметра, переданного из Facebook.

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 ]

3 голосов
/ 28 апреля 2011

Проще использовать 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
  }
}
0 голосов
/ 07 июля 2012

Я использую это. Я надеюсь, что это работает для вас:

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;
0 голосов
/ 11 марта 2011

Прежде чем вы сможете получить данные страницы, вам необходимо привести ваш объект SignRequestJson к паре 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"];

Надеюсь, это поможет.

...