Как прочитать подписанный запрос, используя C# 4.0
Я использую C# 4.0 и интегрирую плагин для регистрации в Facebook. Может кто-нибудь сказать мне, что мне нужно сделать, чтобы прочитать подписанный запрос. Я скачал Facebook.dll и Newtonsoft.Json.dll У меня также есть действительный идентификатор приложения: * ** Ключ API: * ** * ** * *** Секрет приложения: ** * ** * ** * *** * Если возможно, пожалуйста, дайте мне пример кода, как я должен передать эти ключи и как я могу собрать декодированные данные, отправленные в форме подписанного запроса.
Спасибо:
2 ответа
Решение
Должны быть более простые способы прочитать подписанный запрос, вот что я использую. Есть несколько шагов, чтобы прочитать подписанный запрос facebook в C#
- Dot Net 2010 требуется, чтобы выполнить следующие действия. Предполагается, что если вы создадите новый веб-проект с именем "fb", тогда вы можете импортировать этот код в свой реальный проект.
- Загрузить исходный код с http://facebooksdk.codeplex.com/SourceControl/changeset/view/f8109846cba5
- После распаковки вы получите "facebooksdk-f8109846cba5", внутри которого вы найдете папку facebooksdk-f8109846cba5\Source\Facebook, в этой папке ищите "Facebook.csproj"
- Откройте "Facebook.csproj" в версии 2010 года. Найдите файл "FacebookApp.cs", откройте этот файл и выполните поиск по запросу "внутренний защищенный FacebookSignedRequest ParseSignedRequest(строка signatureRequestValue)
- Измените "внутренняя защита" на "публичная"
- Затем создайте проект, щелкнув правой кнопкой мыши на проекте. Теперь его файл "Facebook.dll" готов к использованию. Скопируйте его в каталог bin вашего проекта и добавьте его ссылку.
- Теперь загрузите Json.Net 3.5 выпуск 8 с http://json.codeplex.com/releases/view/50552 и добавьте его в папку bin проекта, а также добавьте его ссылку.
- Теперь вы готовы прочитать подписанный запрос. Пришло время написать код для чтения подписанного запроса.
using System;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using Facebook;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Serialization;
using System.Collections.Generic;
namespace fb
{
public partial class test3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
FacebookApp fap = new FacebookApp();
fap.AppId = "************";
fap.AppSecret = "********************";
string requested_Data = Request.Form["signed_request"];
FacebookSignedRequest fsr = fap.ParseSignedRequest(requested_Data);
// string json = JsonConvert.SerializeObject(fsr.Dictionary, Formatting.Indented);
UserData ud = new UserData(fsr);
Response.Write(ud.name + "
");
Response.Write(ud.birthday + "
");
Response.Write(ud.country + "
");
Response.Write(ud.email + "
");
Response.Write(ud.gender + "
");
Response.Write(ud.location + "
");
Response.Write(ud.userId + "
");
}
}
public class UserData
{
public UserData(FacebookSignedRequest fsr)
{
string value = string.Empty;
JObject o;
foreach (string key in fsr.Dictionary.Keys)
{
value = fsr.Dictionary[key];
switch (key)
{
case "user_id":
userId = value;
break;
case "registration":
o = JObject.Parse(value);
name = GetValue(o, "name");
birthday = GetValue(o, "birthday");
email = GetValue(o, "email");
gender = GetValue(o, "gender");
location = GetValue(o, "location.name");
break;
case "user":
o = JObject.Parse(value);
country = GetValue(o, "country");
break;
}
}
}
private string GetValue(JObject o, string token)
{
string ret = string.Empty;
try
{
ret = (string)o.SelectToken(token);
}
catch (Exception ex)
{
throw ex;
}
return ret;
}
public string name { get; set; }
public string birthday { get; set; }
public string gender { get; set; }
public string location { get; set; }
public string country { get; set; }
public string email { get; set; }
public string userId { get; set; }
}
}
- Это то, что я использую, и это прекрасно работает для меня.
Здесь используется FB C# SDK v.5.2.1.0
var signed_request = Request.Form["signed_request"];
var fap = Facebook.FacebookApplication.Current;
var signed_request_obj = Facebook.FacebookSignedRequest.Parse(fap, signed_request);
if (signed_request_obj != null)
{
JObject o = JObject.Parse(signed_request_obj.Data.ToString());
}