【问题标题】:Responding to Twilio WebHook with XML使用 XML 响应 Twilio WebHook
【发布时间】:2018-02-06 21:42:48
【问题描述】:

我正在构建一个 Web API 2 API 来响应 Twilio webhook。我已经建立了一个相当标准的端点,当我在那里发短信给我的号码时,我可以看到 Twilio 命中了它,但它得到了 12300 - Invalid Content-Type - Invalid Content-Type: application/json; charset=utf-8 提供。

我发现 Twilio 需要 XML 作为响应,但使用 */* 的接受标头,因此我的端点默认返回 JSON。

[Route("reply")]
[HttpPost]
public TwiMLResult TwilioSMS([FromBody]SmsRequest request)
{
    var requestBody = request.Body;

    var response = new MessagingResponse();
    if (requestBody == "hello")
        response.Message("Hi!");
    else
        response.Message("Invalid Input");

    return new TwiMLResult(response);
}

我尝试改为返回 HttpResponseMessage(如下所示),因此我可以指定 XML,但我收到 12200 架构验证警告 - cvc-elt.1:无法从 Twilio 找到元素“TwiMLResult”的声明。

HttpResponseMessage resp = Request.CreateResponse<TwiMLResult>(
        HttpStatusCode.OK, value: new TwiMLResult(response),
        formatter: Configuration.Formatters.XmlFormatter);

如何强制此控制器/端点返回 XML,但不影响我的其他控制器/端点(仍应基于接受标头返回)?

【问题讨论】:

    标签: asp.net-web-api2 twilio


    【解决方案1】:

    这里是 Twilio 开发者宣传员。

    尝试使用XmlMediaTypeFormatter 直接返回MessagingResponse

    return this.Request.CreateResponse(
        HttpStatusCode.OK, XElement.Parse(response), new XmlMediaTypeFormatter());
    

    希望对您有所帮助。

    【讨论】:

    • 当我尝试这个时,我在 response.ToXml() 上收到一个错误 - “'TwiML.ToXml' 由于其保护级别而无法访问”。但是,我尝试了 XElement.Parse(response.ToString()) 并且它有效 - 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    相关资源
    最近更新 更多