Лямбда-функция с использованием c # не может вызывать внешние HTTPS API - PullRequest
0 голосов
/ 04 ноября 2018

Я пытаюсь вызвать внешние API из лямбда-функции AWS, написанной на c #. Ламда-функция развернута в режиме «No VPC». Я вызываю эту функцию из навыка Алекса. Код отлично работает для http-запроса, но не работает для https.

Приведенный ниже код работает хорошо, так как я использую http://www.google.com. Но, если я заменил http на https, я получу сообщение об ошибке в облаке:

«Процесс завершен до завершения запроса.»

Даже журнал, записанный в catch, не регистрируется в облаке. Пожалуйста, совет.

    public class Function
{
    public const string INVOCATION_NAME = "bingo";

    public async Task<SkillResponse> FunctionHandler(SkillRequest input, ILambdaContext context)
    {

        var requestType = input.GetRequestType();
        if (requestType == typeof(IntentRequest))
        {
            string response = "";
            IntentRequest request = input.Request as IntentRequest;
            response += $"About {request.Intent.Slots["carmodel"].Value}";

            try
            {
                using (var httpClient = new HttpClient())
                {
                    Console.WriteLine("Trying to access internet"); 
                    //var resp=httpClient.GetAsync("http://www.google.com").Result // this works perfect!                   
                    var resp = httpClient.GetAsync("https://www.google.com").Result; // this throws error
                    Console.WriteLine("Call was successful");
                }                
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception from main function " + ex.Message);
                Console.WriteLine(ex.InnerException.Message);
                Console.WriteLine(ex.StackTrace);

            }            
            return MakeSkillResponse(response, true);
        }
        else
        {
            return MakeSkillResponse(
                    $"I don't know how to handle this intent. Please say something like Alexa, ask {INVOCATION_NAME} about Tesla.",
                    true);
        }
    }


    private SkillResponse MakeSkillResponse(string outputSpeech, bool shouldEndSession,
        string repromptText = "Just say, tell me about car models to learn more. To exit, say, exit.")
    {
        var response = new ResponseBody
        {
            ShouldEndSession = shouldEndSession,
            OutputSpeech = new PlainTextOutputSpeech { Text = outputSpeech }
        };

        if (repromptText != null)
        {
            response.Reprompt = new Reprompt() { OutputSpeech = new PlainTextOutputSpeech() { Text = repromptText } };
        }

        var skillResponse = new SkillResponse
        {
            Response = response,
            Version = "1.0"
        };
        return skillResponse;
    }
}

1 Ответ

0 голосов
/ 02 декабря 2018

Проблема решена. System.net.http v4.3.4 не был полностью совместим с Core dot net v1. Таким образом, исходящие http-вызовы работали, но не https. Изменение версии System.net.http решило проблему.

...