如何解决Twilio消息传递Webhook-不支持的媒体类型-Asp.net Core 3.1 API
我有一个带有端点的asp.net核心(3.1)Web API,可以接受Twilio Messaging Webhook。当我从邮递员本地运行它时,当网络挂钩发布时,我会收到415“不受支持的媒体类型”
[ApiController]
[Route("[controller]")]
public class TwillioController : TwilioController
{
[HttpPost("ProcessIncomingMessage")]
public TwiMLResult ProcessIncomingMessage(SmsRequest incomingMessage)
{
Console.WriteLine($"Recieved new SMS from {incomingMessage.From}");
var messagingResponse = new MessagingResponse();
messagingResponse.Message("The copy cat says: " +
incomingMessage.Body);
return TwiML(messagingResponse);
}
}
当邮递员的标头中具有Content-Type:application / json时,它可以工作。
我也尝试添加
[Consumes("application/x-www-form-urlencoded")]
以及
[Consumes("application/xml")]
并且都仍然获得不受支持的媒体类型...无法弄清楚Twilio发送了什么,或者我需要做些什么才能使其与Webhook兼容。
解决方法
正如其他答案所述,Twilio 发送内容类型为 x-www-form-urlencoded
的请求。使用 [ApiController]
属性注释的控制器中的操作需要在参数上具有 [FromForm]
属性才能工作,如下所示:
[ApiController]
public class TwilioController : ControllerBase
{
[HttpPost("")]
public TwiMLResult Post([FromForm] SmsRequest request)
{
// do stuff with the SMS request
}
}
虽然您可以包含 [Consumes]
属性,但这不是必需的。
以下是Twilio发送到您的应用程序的详细信息,因此application/x-www-form-urlencoded
是100%正确的。
“对于入站文本消息,Twilio将使用使用application / x-www-form-urlencoded编码的正文将HTTP POST请求发送到您的服务器。查看在该请求中发送的list of parameters。”
如果在邮递员的标头中设置Content-Type:application/json
时可以使用,则出现了一些问题,因为它应该预期并消耗application/x-www-form-urlencoded
。
因此,我意识到ApiController是要扔掉它的东西。我删除了所有属性,并在启动时添加了正确的路由,并且可以正常工作。
public class SmsController : TwilioController
{
public TwiMLResult WebHook(SmsRequest incomingMessage)
{
var messagingResponse = new MessagingResponse();
if (incomingMessage != null)
{
messagingResponse.Message($"The copy cat says: {incomingMessage.Body}");
}
else
{
messagingResponse.Message($"Recieved SMS but body was null");
}
return TwiML(messagingResponse);
}
}
在启动时添加了端点
endpoints.MapControllerRoute(
name: "sms",pattern: "sms/{Action}",defaults: new { Controller = "Sms"});
并且Webhook URL为https:// OURURL / sms / WebHook
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。