4

我正在尝试设置 Facebook 通知 API。我有一个带有 RealtimeUpdate() - Get 的 APi 控制器,仅用于验证端点。

正如 Fb Docs 中所写:

首先,当您尝试添加或修改订阅时,Facebook 服务器将向您的回调 URL 发出单个 HTTP GET。带有以下参数的查询字符串将附加到您的回调 URL:

  • hub.mode - 字符串“subscribe”在此参数中传递
  • hub.challenge - 一个随机字符串
  • hub.verify_token - 您在创建订阅时指定的 verify_token 值

从这里我有一个问题 - 我不知道如何处理查询参数名称中的这些点。我google了很多,没有找到解决方案。

有人可以告诉我如何从这个集线器获取数据。*值吗?

谢谢!

4

3 回答 3

15

使用 FromUri 属性更新您的方法签名,如下所示:

public string Get(
    [FromUri(Name="hub.mode")]string mode,
    [FromUri(Name="hub.challenge")]string challenge,
    [FromUri(Name="hub.verify_token")]string verifyToken
    )
{
    /* method body */
}

参数将使用指定的名称从查询字符串中绑定。

于 2013-07-24T21:38:33.523 回答
1

与史蒂夫的回答略有不同。

如果你需要一个普通的控制器而不是一个 Api 控制器(如果你继承自Controller而不是 tha ApiController),以下对我有用:

 namespace Name
    {
            public class Hub
        {
            public string Mode { get; set; }

            public string Challenge { get; set; }

            // ReSharper disable once InconsistentNaming
            public string Verify_Token { get; set; }
        }

        public class FacebookWebHooksController : Controller
        {
            [System.Web.Http.HttpGet, ActionName("Callback")]
            [AllowAnonymous]
            public ContentResult CallbackGet(Hub hub)
            {
                if (hub.Mode == "subscribe" && hub.Verify_Token == "YOUR_TOKEN")
                    return Content(hub.Challenge, "text/plain", Encoding.UTF8);

                return Content(string.Empty, "text/plain", Encoding.UTF8);
            }
        }

        [HttpPost]
        [AllowAnonymous]
        public ActionResult Callback()
        {
            Request.InputStream.Seek(0, SeekOrigin.Begin);
            var jsonData = new StreamReader(Request.InputStream).ReadToEnd();

        }
    }
于 2017-09-16T02:36:51.077 回答
0

模型活页夹有一些非法字符,我相信其中的 '.' 是一个特殊字符,主要用于绑定复杂对象。当所有其他方法都失败时,您可以直接查看 Request.QueryString 和 Request.Form,就像在 ASP.NET WebForms 中一样。

您还可以尝试使用具有名为 hub 的属性的复杂对象,该属性具有子属性 mode、challenge 和 verify_token。这可能只是解决问题。

于 2013-07-24T20:47:47.147 回答