Почему при подключении к Text Analytics API появляется ошибка (400) Bad Request?

Я новый разработчик на C# и пытаюсь использовать API-интерфейс Text Analytics с машинным обучением Azure в своем тестовом приложении ASP.NET для определения настроения и ключевых фраз для твитов, которые у меня есть в базе данных. Я следил за этой полезной статьей, чтобы подключиться к Text Analytics API. Во время отладки своего кода я смог получить ключевые фразы и настроения для первого твита в списке, а затем получил следующее исключение, и я не знаю почему:

Удаленный сервер возвратил ошибку: (400) Bad Request.

Вот мой код:

private const string apiKey = "XXXXXXXXX"; //Key 2 value of Text Analytics API from Azure Portal
        private const string sentimentUri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment";
        private const string keyPhrasesUri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases";
        private const string languageUri = "https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/languages";

        protected void Page_Load(object sender, EventArgs e)
        {

        }


        private IEnumerable<T_Tweet> GetData()
        {
            TweetBL tweetBl = new TweetBL();
            IEnumerable<T_Tweet> tweetsList = tweetBl.GetTweets();
            return tweetsList;
        }


        protected void lbtnAnalyze_Click(object sender, EventArgs e)
        {
            var tweetsList = GetData();
            if (tweetsList != null)
            {
                List<TweetSentimentModel> tweetSenti = new List<TweetSentimentModel>();
                foreach (var tweet in tweetsList)
                {
                    try
                    {
                        // Prepare headers
                        var client = new WebClient();
                        client.Headers.Add("Ocp-Apim-Subscription-Key", apiKey);
                        client.Headers.Add("Content-Type", "application/json");
                        client.Headers.Add("Accept", "application/json");

                        // Detect language
                        var postData1 = @"{""documents"":[{""id"":""1"", ""text"":""@sampleText""}]}".Replace("@sampleText", tweet.TweetText);
                        var response1 = client.UploadString(languageUri, postData1);
                        var language = new Regex(@"""iso6391Name"":""(\w+)""").Match(response1).Groups[1].Value;

                        // Determine sentiment
                        var postData2 = @"{""documents"":[{""id"":""1"", ""language"":""@language"", ""text"":""@sampleText""}]}".Replace("@sampleText", tweet.TweetText).Replace("@language", language);
                        var response2 = client.UploadString(sentimentUri, postData2);
                        var sentimentStr = new Regex(@"""score"":([\d.]+)").Match(response2).Groups[1].Value;
                        var sentiment = Convert.ToDouble(sentimentStr, System.Globalization.CultureInfo.InvariantCulture);

                        // Detemine key phrases
                        var postData3 = postData2;
                        var response3 = client.UploadString(keyPhrasesUri, postData2);
                        var keyPhrases = new Regex(@"""keyPhrases"":(\[[^\]]*\])").Match(response3).Groups[1].Value;


                        TweetSentimentModel tweetSentiObj = new TweetSentimentModel();
                        tweetSentiObj.TweetId = tweet.Id;
                        tweetSentiObj.TweetText = tweet.TweetText;
                        tweetSentiObj.SentimentLabel = sentiment.ToString();
                        tweetSentiObj.KeyPhrases = keyPhrases;
                        tweetSentiObj.CreatedOn = DateTime.Now;
                        tweetSenti.Add(tweetSentiObj);
                    }
                    catch (Exception ex)
                    {
                        throw ex;
                    }
                }

                if (tweetSenti != null)
                {
                    PrintAnalysisResults(tweetSenti);
                }
            }
        }

Не могли бы вы сказать мне, почему я получаю эту ошибку и как я могу ее исправить?

1 ответ

Решение

Мне удалось получить ключевые фразы и настроения для первого твита в списке, а затем я получил следующее исключение, и я не знаю почему:

Согласно вашему описанию, разница между вторым и первым временем - это объект твита. И (400) Bad Request также означает, что параметры клиента HTTP-запроса неверны.

Я могу воспроизвести его, пока tweet.TweetText равен нулю, или tweet.TweetText.trim() равно string.empty.

Пожалуйста, попробуйте отладить, если это так, попробуйте добавить логику для управления им. Ниже приведен демонстрационный код.

if (!string.IsNullOrEmpty(tweet.TweetText?.Trim()))
  {
       // Determine sentiment
       var postData2 = @"{""documents"":[{""id"":""1"", ""language"":""@language"", ""text"":""@sampleText""}]}".Replace(
                            "@sampleText", tweet.TweetText).Replace("@language", language);
                    var response2 = client.UploadString(SentimentUri, postData2);
                    var sentimentStr = new Regex(@"""score"":([\d.]+)").Match(response2).Groups[1].Value;
                    var sentiment = Convert.ToDouble(sentimentStr, System.Globalization.CultureInfo.InvariantCulture);

                    // Detemine key phrases
                    var postData3 = postData2;
                    var response3 = client.UploadString(KeyPhrasesUri, postData2);
                    var keyPhrases = new Regex(@"""keyPhrases"":(\[[^\]]*\])").Match(response3).Groups[1].Value;

    }
Другие вопросы по тегам