.NET Core API 中的 Twilio StatusCallBack & Gather POST 方法返回 HTTP 415 - 不支持的媒体类型

Twilio StatusCallBack & Gather POST method in .NET Core API returning HTTP 415 - Unsupported Media Type

下面是我对这两种方法的代码 -

GatherCall 正在返回 Twiml,我仍然得到 HTTP 415 并且 StatusCallback 方法也是如此。有人可以帮忙吗?我什至无法使用 ngrok 对此进行测试,因为隧道工具在我的组织网络中不起作用。我正在使用 Azure 通过记录所有内容来测试这个。

public TwiMLResult GatherCall([FromRoute] string id, [FromBody] VoiceRequest voiceRequest )
{
    _logger.LogInformation("*****************GatherCall - Start****************");
    var response = new VoiceResponse();

    try
    {
        _logger.LogInformation("Gather call back for -" + id);

        _logger.LogInformation("VoiceRequest parameters-------------------------");
        _logger.LogInformation("CallSid : " + voiceRequest.CallSid);
        _logger.LogInformation("CallStatus : " + voiceRequest.CallStatus);
        _logger.LogInformation("AccountSid : " + voiceRequest.AccountSid);
        _logger.LogInformation("From : " + voiceRequest.From);
        _logger.LogInformation("To : " + voiceRequest.To);
        _logger.LogInformation("Digits : " + voiceRequest.Digits);
        _logger.LogInformation("Direction : " + voiceRequest.Direction);
        _logger.LogInformation("TranscriptionText : " + voiceRequest.TranscriptionText);

        if (voiceRequest.Digits == "1234")
        {
            response.Say("Your response has been recorded. Thank you.", voice: "alice");
            response.Hangup();
            //acctepted response
            //update call status to db
            //acknowledge incident
        }
        else
        {
            response.Say("Incorrect code enterted. Please enter correct code to accespt this incident", voice: "alice");
            response.Pause(3);
            response.Hangup();
        }

        _logger.LogInformation("*****************GatherCall - EndTry****************");
    }
    catch (Exception ex)
    {
        _logger.LogError(ex.Message);
        _logger.LogInformation("*****************GatherCall - EndCatch****************");
    }
    return TwiML(response);
    // return TwiML(response.ToString(), "application/xml");
}

public IActionResult StatusCallBack([FromRoute] string id, [FromBody] StatusCallbackRequest statusCallbackRequest)
{
    _logger.LogInformation("*****************StatusCallBack - Start****************");
    try
    {
        _logger.LogInformation("Status call back called for -" + id );

        _logger.LogInformation("StatusCallbackRequest parameters-------------------------");
        _logger.LogInformation("CallSid : " + statusCallbackRequest.CallSid);
        _logger.LogInformation("CallStatus : " + statusCallbackRequest.CallStatus);
        _logger.LogInformation("AccountSid : " + statusCallbackRequest.AccountSid);
        _logger.LogInformation("From : " + statusCallbackRequest.From);
        _logger.LogInformation("To : " + statusCallbackRequest.To);
        _logger.LogInformation("Digits : " + statusCallbackRequest.Digits);
        _logger.LogInformation("Direction : " + statusCallbackRequest.Direction);
        _logger.LogInformation("TranscriptionText : " + statusCallbackRequest.TranscriptionText);


        _logger.LogInformation("*****************StatusCallBack - EndTry****************");
        return Ok("Handled");
    }
    catch (Exception ex)
    {
        _logger.LogError(ex.Message);
        _logger.LogInformation("*****************StatusCallBack - EndCatch****************");
        return Ok("Handled in catch");
    }
}

这里是 Twilio 传播者...很抱歉让您遇到困难。看起来您的代码正在尝试将 voiceRequest 参数绑定到来自 Twilio 的传入 POST 请求的主体(使用 [FromBody])。如果 Twilio 正在发送 POST 请求,您需要绑定到表单 (using [FromForm])。否则,ASP.NET 核心将 return 一个 415 错误代码。

尝试用 [FromForm] 替换 [FromBody]。这应该可以根据 POST 请求解决此问题。我还建议验证 Twilio 实际上发送的是 POST,而不是 GET 请求。

如果您 运行 遇到更多问题,请通过电子邮件将说明发送至 corey@twilio.com。希望这有帮助。