【发布时间】: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}¶meterTwo={parameterTwo}",
method: "POST");
return TwiML(response);
}
生成以下 XML:
<?xml version="1.0" encoding="utf-8"?>
<Response>
<Redirect method="POST">https://example.com/Gather?paramaterOne="test"&parameterTwo="test"</Redirect>
</Response>
想法是 Twilio 应该将其标准请求对象发布到此端点,但在查询字符串中包含我的参数:
[HttpPost]
public async Task<ActionResult> Gather([FromUri] string parameterOne, string parameterTwo [FromBody] TwilioCallbackRequest request)
{
// Do stuff
}
但是,由于 XML 编码的 &amp; 未被 Web 服务器理解为查询字符串分隔符,因此请求失败。
理想情况下,有一种方法可以修改 Twilio 请求的表单值以包含我需要传递的参数,但我不相信该功能存在。
我的问题是:
A.有什么方法可以让 Twilio 对其查询进行 URL 编码?或
B.在我有机会处理请求之前,在 ASP.NET 中以这种方式接受格式错误的查询字符串而不出错的最佳方法是什么?
目前我的 hacky 解决方法是将我的查询字符串参数作为一个下划线分隔的大字符串发送并手动解析我的参数,但我怀疑这是最好的方法。我还考虑过使用 OWIN 中间件拦截请求并尝试修改此端点的查询字符串。
【问题讨论】: