C# .NET MVC API-get请求中的点(周期)
我正在尝试设置Facebook通知API。 我有一个带有RealtimeUpdate()-Get的APi控制器,将仅用于验证端点 正如Fb文件中所述: 首先,Facebook服务器将对您的回调进行单一HTTP访问 尝试添加或修改订阅时的URL。将显示一个查询字符串 将以下参数附加到回调URL: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值 从这里我有一个问题-
- 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]