public static async Task <EvaluateResult> Evaluate(string query)
        {
            var client      = new HttpClient();
            var queryString = HttpUtility.ParseQueryString(string.Empty);

            // Request headers
            client.DefaultRequestHeaders.Add("Ocp-Apim-Subscription-Key", "SECRET");

            // Request parameters
            queryString["expr"]       = query;
            queryString["model"]      = "latest";
            queryString["count"]      = "10";
            queryString["attributes"] = "Id,E";
            var uri = "https://api.projectoxford.ai/academic/v1.0/evaluate?" + queryString;

            var response = await client.GetAsync(uri);

            string resp = await response.Content.ReadAsStringAsync();

            EvaluateResult result = JsonConvert.DeserializeObject <EvaluateResult>(resp);

            return(result);
        }
        public async Task AfterChosenAsync(IDialogContext context, IAwaitable <long> argument)
        {
            var            choice = await argument;
            AcademicResult result = new AcademicResult();

            context.PerUserInConversationData.TryGetValue <AcademicResult>("result", out result);
            string responseMessage = string.Empty;
            string linkMsg         = string.Empty;

            if (result != null)
            {
                if (choice > result.interpretations.Count())
                {
                    await context.PostAsync("Okay! ask me.");
                }
                else
                {
                    EvaluateResult resp = await Utilities.Evaluate(result.interpretations[Convert.ToInt16(choice) - 1].rules[0].output.value);

                    int counter = 1;
                    foreach (var en in resp.entities)
                    {
                        EX ex = JsonConvert.DeserializeObject <EX>(en.E);
                        linkMsg = string.Empty;
                        foreach (var link in ex.S)
                        {
                            switch (link.Ty)
                            {
                            case 1:
                                linkMsg += $" [HTML]({link.U})";
                                break;

                            case 2:
                                linkMsg += $" [TEXT]({link.U})";
                                break;

                            case 3:
                                linkMsg += $" [PDF]({link.U})";
                                break;

                            case 4:
                                linkMsg += $" [DOC]({link.U})";
                                break;

                            case 5:
                                linkMsg += $" [PPT]({link.U})";
                                break;

                            case 6:
                                linkMsg += $" [XLS]({link.U})";
                                break;

                            case 7:
                                linkMsg += $" [PS]({link.U})";
                                break;

                            default:
                                linkMsg += $" [LINK]({link.U})";
                                break;
                            }
                        }

                        responseMessage += $"- {counter} . {ex.DN} {linkMsg} \r\n";
                        counter++;
                    }

                    await context.PostAsync(responseMessage);
                }
            }

            context.Wait(MessageReceivedAsync);
        }