Отправить Twilio URI перенаправления на другое действие в том же контроллере - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь отправить Twilio URI перенаправления на другое действие в том же контроллере. Я не могу дать полностью сформированный Uri, потому что я в разработке и использую localhost. Я думал, что воспользуюсь родственником Ури. Как это написано, я постоянно получаю сообщение «Добро пожаловать», когда пытаюсь перенаправить на «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);
            }
        }
    }
}

1 Ответ

0 голосов
/ 06 мая 2020

Первое, что я сделал, это изменил 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 новый 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);
        }
...