【问题标题】:URL-safe actions in Twilio TwiML responsesTwilio TwiML 响应中的 URL 安全操作
【发布时间】:2017-07-14 22:45:17
【问题描述】:

为简洁起见,我有一个端点,它接受一些参数,并返回一个 TwiML 响应以将调用重定向到另一个端点以收集用户的 DTMF 响应:

[HttpGet]
public async MyEndpoint<ActionResult> Test(string parameterOne, string parameterTwo)
{
    var response = new VoiceResponse()
        .Redirect(
            url: $"https://example.com/Gather?parameterOne={parameterOne}&parameterTwo={parameterTwo}",
            method: "POST");

    return TwiML(response);
}

生成以下 XML:

<?xml version="1.0" encoding="utf-8"?>
<Response>
    <Redirect method="POST">https://example.com/Gather?paramaterOne="test"&amp;parameterTwo="test"</Redirect>
</Response>

想法是 Twilio 应该将其标准请求对象发布到此端点,但在查询字符串中包含我的参数:

[HttpPost]
public async Task<ActionResult> Gather([FromUri] string parameterOne, string parameterTwo [FromBody] TwilioCallbackRequest request)
{
    // Do stuff
}

但是,由于 XML 编码的 &amp;amp; 未被 Web 服务器理解为查询字符串分隔符,因此请求失败。

理想情况下,有一种方法可以修改 Twilio 请求的表单值以包含我需要传递的参数,但我不相信该功能存在。

我的问题是:

A.有什么方法可以让 Twilio 对其查询进行 URL 编码?或

B.在我有机会处理请求之前,在 ASP.NET 中以这种方式接受格式错误的查询字符串而不出错的最佳方法是什么?

目前我的 hacky 解决方法是将我的查询字符串参数作为一个下划线分隔的大字符串发送并手动解析我的参数,但我怀疑这是最好的方法。我还考虑过使用 OWIN 中间件拦截请求并尝试修改此端点的查询字符串。

【问题讨论】:

    标签: c# asp.net twilio


    【解决方案1】:

    Twilio 开发布道者在这里...

    您似乎同时使用了 Twilio 和 Twilio.AspNet.Mvc 包来返回您的响应。您还可以通过为您的 Get 方法准备响应来实现您的目标,而无需使用 Twilio.AspNet.Mvc 包。这是一个例子:

    [HttpGet]
    public HttpResponseMessage Get(string parameterOne, string parameterTwo)
    {
        var response = new VoiceResponse()
            .Redirect(
                url: $"https://example.com/Gather?paramaterOne={parameterOne}&parameterTwo={parameterTwo}",
            method: "POST");
        var content = new StringContent(response.ToString(), Encoding.UTF8, "application/xml");
        return new HttpResponseMessage
        {
            Content = content,
            StatusCode = HttpStatusCode.OK
        };
    }
    

    试试这个,如果遇到问题,请告诉我。

    【讨论】:

    • 感谢您的建议,但这会返回以下内容:StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers: { Content-Type: application/xml; charset=utf-8 } Twilio 不喜欢(12100 文档解析失败)
    • 您收到此回复非常有趣。您介意发布(或通过 corey@twilio.com 给我发送电子邮件)您用于这两种方法的确切代码吗?根据上面的回复,我怀疑字符串内容实际上并没有被发送。
    • 你是对的!我让 MVC 和 WebAPI 绑定争夺相同的路由。然而,值得注意的是,Twilio XML 生成器(TwiML 构造函数)在返回 XML 时可能不应该与 & 符号混淆。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 2019-05-14
    相关资源
    最近更新 更多