Логика связывания членов ExpandoObject () и FB Graph API - PullRequest
1 голос
/ 15 декабря 2010

Только что начался сегодня какой-то разработчик, использующий Facebook SDK, и я не могу понять логику, которой следуют, чтобы связать члены объекта expando с полями в объектах Graph API в примере ниже, который был взят из документации C # SDK facebook:

   public ActionResult RestFacebookPage()
   {
      FacebookApp app = new FacebookApp();
      dynamic parameters = new ExpandoObject();
      parameters.page_ids = "85158793417";
      parameters.method = "pages.getInfo";
      parameters.fields = "name";
      dynamic result = app.Api(parameters);
      return View("FacebookPage", result);
   }

Я понимаю page_ids и поля, но не pages.getInfo. Было бы замечательно, если бы кто-то мог просветить меня здесь и сказать мне, где в документации я могу найти ссылку, которая приводит меня к этому ...

Большое спасибо!

1 Ответ

1 голос
/ 16 декабря 2010

Не уверен, что я понимаю, о чем вы спрашиваете, но на их странице проекта есть довольно приличный пример перевода php в facebook-c # -sdk. Тогда вы можете просто посмотреть официальную документацию разработчика Facebook напрямую.

Если вы спрашивали больше о типе вопроса "как это реализовано", то лучший способ сделать это, по моему мнению, это пробить строку, содержащую app.Api, а затем просто пройтись по коду. В методе Api есть проверка, содержит ли словарь параметров ключ «метод». Если это так, SDK определяет, что вызов привязан к старому API остальных, а не к графу API. На несколько кадров ниже мы находим код, который делает URL:


protected virtual Uri GetUrl(string name, string path, IDictionary parameters)
{
  Contract.Requires(!String.IsNullOrEmpty(name));
  Contract.Ensures(Contract.Result() != default(Uri));

  if (_domainMaps[name] == null)
  {
    throw new ArgumentException("Invalid url name.");
  }

  UriBuilder uri = new UriBuilder(_domainMaps[name]);
  if (!String.IsNullOrEmpty(path))
  {
    if (path[0] == '/')
    {
      if (path.Length > 1)
      {
        path = path.Substring(1);
      }
      else
      {
        path = string.Empty;
      }
    }
    if (!String.IsNullOrEmpty(path))
    {
      uri.Path = UriEncoder.EscapeDataString(path);
    }
  }
  if (parameters != null)
  {
    uri.Query = parameters.ToJsonQueryString();
  }
  return uri.Uri;
}

Вы, вероятно, должны сами войти в этот метод, чтобы увидеть, что содержат переменные, и это должно иметь смысл для вас. Источник всегда лучшая документация. Надеюсь, это поможет.

...