.NET MVC API-get请求中的句点(句点)

本文关键字:句点 MVC API-get 请求 NET | 更新日期: 2023-09-27 18:24:41

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

正如Fb文档中所写:

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

  • hub.mode-此参数中传递字符串"subscribe"
  • hub.challenge-随机字符串
  • hub.verify_token-创建订阅时指定的verify_toke值

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

有人能告诉我如何从这个hub.*值中获取数据吗?

谢谢!

.NET MVC API-get请求中的句点(句点)

使用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和Request.Form,就像在ASP.NET WebForms中一样。

您还可以尝试使用一个复杂对象,该对象具有名为hub的属性,并具有子属性mode、challenge和verify_token。这可能会奏效。