【问题标题】:How to read signed request using c# 4.0如何使用 c# 4.0 读取签名请求
【发布时间】:2011-09-02 09:41:54
【问题描述】:

我正在使用 c# 4.0,我正在集成 facebook 注册插件 有人可以告诉我我需要做什么才能阅读签名的请求。 我已经下载了 Facebook.dll 和 Newtonsoft.Json.dll 我也有有效 应用 ID:*** API 密钥:********** 应用密钥:************* 如果可能,请给我一个示例代码,我应该如何传递这些密钥以及如何收集以签名请求形式发送的解码数据。

谢谢:

【问题讨论】:

标签: c# facebook sdk request signed


【解决方案1】:

必须有更简单的方法来阅读我正在使用的签名请求。在 C# 中读取 facebook 签名请求涉及几个步骤

  1. Dot net 2010 需要遵循这些步骤。建议您在完成后新建一个名为“fb”的基于 Web 的项目,然后您可以将此代码导入到您的实际项目中。
  2. http://facebooksdk.codeplex.com/SourceControl/changeset/view/f8109846cba5#Source%2fFacebook%2fFacebookApp.cs下载源
  3. 解压后你会得到“facebooksdk-f8109846cba5”,你会在这个文件夹中找到一个文件夹facebooksdk-f8109846cba5\Source\Facebook 寻找“Facebook.csproj”
  4. 在 vs 2010 中打开“Facebook.csproj”查找文件“FacebookApp.cs”打开此文件并搜索“internal protected FacebookSignedRequest ParseSignedRequest(string signedRequestValue)
  5. 将“内部保护”更改为“公共”
  6. 然后通过右键单击项目来构建项目。现在它的编译文件(“Facebook.dll”)可以使用了。将其复制到您的项目 bin 目录并添加其引用。
  7. 现在从http://json.codeplex.com/releases/view/50552 下载 Json.Net 3.5 第 8 版,并将其添加到您的项目 bin 文件夹并添加其引用。
  8. 现在您可以阅读已签名的请求了。是时候编写代码来读取签名请求了。

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; } } }
  1. 这是我正在使用的,它对我来说工作正常。

【讨论】:

  • Shahid,您回答自己的问题真是太好了。请注意,您也可以接受它。这样,每个人都会看到您的问题得到了解答。
【解决方案2】:

这里使用的是 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());
}

【讨论】:

    猜你喜欢
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    • 2015-09-23
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    相关资源
    最近更新 更多