asp.net-core-mvc - 向 Twilio 发送重定向 Uri 到同一控制器中的另一个操作
问题描述
我正在尝试将 Twilio 重定向 URI 发送到同一控制器中的另一个操作。我无法提供完整的 Uri,因为我正在开发中并且我正在使用 localhost。我想我会使用一个相对的 Uri。它的编写方式是,当我尝试重定向到“RouteCall”时,我不断收到“欢迎”的反馈。
作为旁注,MVC 中的路由似乎非常多余。如果不明确使用您看到的 Route 标记,我无法让路由工作。
using System;
using Microsoft.AspNetCore.Mvc;
using Twilio.AspNet.Core;
using Twilio.TwiML;
namespace centurionvoice.Controllers
{
[Route("[controller]")]
[ApiController]
public class VoiceController : TwilioController
{
[Route("welcome")]
public IActionResult Welcome()
{
Uri newUri = new Uri("/RouteCall", UriKind.Relative);
var response = new VoiceResponse();
response.Say("Thank you for calling. To do some thing, press 1. To do another thing, press 0.");
response.Gather(numDigits: 1);
response.Redirect(newUri);
return TwiML(response);
}
[Route("routecall")]
[AcceptVerbs("GET", "POST")]
public IActionResult RouteCall(string digits)
{
var response = new VoiceResponse();
if (digits.Equals("1"))
{
//Dial the someone else
response.Say("You are being trasferred.");
return TwiML(response);
}
else
{
//Record a message
response.Say("Please record your message.");
response.Gather();
return TwiML(response);
}
}
}
}
解决方案
我做的第一件事是修改 Startup.cs 来配置基本/直观的路由。
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "api/{controller=Voice}/{action=Index}/{id?}");
});
}
然后回到 VoiceController,new Uri() 不再抛出错误:
[HttpPost]
public IActionResult Index()
{
var response = new VoiceResponse();
var gather = new Gather(numDigits: 1, action: new Uri("/api/voice/gather", UriKind.Relative));
gather.Say("To do one thing, press 1. To do another thing, press 0.", voice: "Polly.Nicole");
response.Append(gather);
// If the user doesn't enter input, loop
response.Redirect(new Uri("/api/voice", UriKind.Relative));
return TwiML(response);
}