.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.*值中获取数据吗?
谢谢!
使用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。这可能会奏效。