C# .NET MVC API-get请求中的点(周期)

C# .NET MVC API-get请求中的点(周期),c#,facebook,asp.net-mvc-4,C#,Facebook,Asp.net Mvc 4,我正在尝试设置Facebook通知API。 我有一个带有RealtimeUpdate()-Get的APi控制器,将仅用于验证端点 正如Fb文件中所述: 首先,Facebook服务器将对您的回调进行单一HTTP访问 尝试添加或修改订阅时的URL。将显示一个查询字符串 将以下参数附加到回调URL: hub.mode-字符串“subscribe”在此参数中传递 hub.challenge-随机字符串 hub.verify_token-创建订阅时指定的verify_token值 从这里我有一个问题-

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

正如Fb文件中所述:

首先,Facebook服务器将对您的回调进行单一HTTP访问 尝试添加或修改订阅时的URL。将显示一个查询字符串 将以下参数附加到回调URL:

  • hub.mode-字符串“subscribe”在此参数中传递
  • hub.challenge-随机字符串
  • hub.verify_token-创建订阅时指定的verify_token值
从这里我有一个问题-我不知道如何处理查询参数名称中的点。我谷歌了很多,没有找到解决办法

有人能告诉我如何从这个中心获取数据。*值吗


谢谢大家!

模型绑定器有一些非法字符,我认为“.”是一个特殊字符,主要用于绑定复杂对象。当所有其他操作都失败时,您可以直接查看Request.QueryString和Request.Form,就像在ASP.NET WebForms中一样


您还可以尝试使用一个复杂对象,该对象具有名为hub的属性以及子属性mode、challenge和verify\u标记。这可能就是关键所在。

使用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 */
}

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

与Steve的答案略有不同

如果您需要一个普通的控制器而不是Api控制器(如果您继承的是
controller
而不是
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();

        }
    }

模型绑定器不工作:(和Request.QueryString或.Form也将不工作,因为在ApiController中(我从中继承了我的控制器)有一个称为请求的属性,它不包含。QuerySting MethodI会考虑使这个控制器成为非API控制器…或者使用定制的模型绑定器。从ApController切换到控制器。现在我可以请求QueryString并获得所有的对象。谢谢帮助!知道如何在Api控制器中实现它是个好主意。顺便说一句,模型绑定没有帮助:(太棒了,我不知道你可以这么做!对于任何使用.Net Core访问此主题的人来说,属性是[FromQuery],而不是[FromUri]