Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么连接到文本分析API时出现(400)错误请求错误?_C#_Azure_Webforms_Text Analytics Api - Fatal编程技术网

C# 为什么连接到文本分析API时出现(400)错误请求错误?

C# 为什么连接到文本分析API时出现(400)错误请求错误?,c#,azure,webforms,text-analytics-api,C#,Azure,Webforms,Text Analytics Api,我是一名新的C#开发者,我正在尝试在我的测试ASP.NET应用程序中使用文本分析API和Azure机器学习来定义我在数据库中的推文的情感和关键短语。 我阅读了这篇有用的文章,以便能够连接到文本分析API。在调试我的代码时,我能够获得列表中第一条tweet的关键短语和情感,然后我得到了以下异常,我不知道为什么: 远程服务器返回错误:(400)请求错误 这是我的密码: private const string apiKey = "XXXXXXXXX"; //Key 2 value of Text A

我是一名新的C#开发者,我正在尝试在我的测试ASP.NET应用程序中使用文本分析API和Azure机器学习来定义我在数据库中的推文的情感和关键短语。 我阅读了这篇有用的文章,以便能够连接到文本分析API。在调试我的代码时,我能够获得列表中第一条tweet的关键短语和情感,然后我得到了以下异常,我不知道为什么:

远程服务器返回错误:(400)请求错误

这是我的密码:

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);
                }
            }
        }
private const string apiKey=“XXXXXXXXX”//Azure门户中文本分析API的关键2价值
私有常量字符串URI=”https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/sentiment";
private const string关键字短语suri=”https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases";
私有常量字符串语言URI=”https://westus.api.cognitive.microsoft.com/text/analytics/v2.0/languages";
受保护的无效页面加载(对象发送方、事件参数e)
{
}
私有IEnumerable GetData()
{
TweetBL TweetBL=新的TweetBL();
IEnumerable tweetsList=tweetBl.GetTweets();
返回tweetsList;
}
受保护的无效LBTNANALYSE\u单击(对象发送方,事件参数e)
{
var tweetsList=GetData();
if(tweetsList!=null)
{
List tweetSenti=新列表();
foreach(tweetsList中的var tweet)
{
尝试
{
//准备标题
var client=new WebClient();
client.Headers.Add(“Ocp Apim订阅密钥”,apiKey);
client.Headers.Add(“内容类型”、“应用程序/json”);
client.Headers.Add(“Accept”、“application/json”);
//检测语言
var postData1=@“{”“documents”“:[{”“id”“:”“1”“”“text”“:”“@sampleText”“}]}”。替换(“@sampleText”,tweet.TweetText);
var response1=client.UploadString(languageUri,postData1);
var language=new Regex(@“iso6391Name”):“”(\w+“”)。匹配(响应1)。组[1]。值;
//定情
var postData2=@“{”“documents”“:[{”“id”“:”“1”“语言”“:”“@language”“text”“:”“@sampleText”“}]}”。替换(“@sampleText”,tweet.TweetText)。替换(“@language”,language);
var response2=client.UploadString(mountauri,postData2);
var=new Regex(@“score”):([\d.]+)”)。匹配(response2)。组[1]。值;
var THEMOTION=Convert.ToDouble(感情用事、系统、全球化、文化信息、不变量文化);
//确定关键短语
var postData3=postData2;
var response3=client.UploadString(keyPhrasesUri,postData2);
var keyphases=new Regex(@“keyphases”):(\[^\]]*\])。匹配(response3)。组[1]。值;
TweetMotionModel tweetSentiObj=新的TweetMotionModel();
tweetSentiObj.TweetId=tweet.Id;
tweetSentiObj.TweetText=tweet.TweetText;
tweetSentiObj.感伤标签=感伤.ToString();
tweetSentiObj.keyphases=关键短语;
tweetSentiObj.CreatedOn=DateTime.Now;
tweetSenti.Add(tweetSentiObj);
}
捕获(例外情况除外)
{
掷骰子;
}
}
如果(tweetSenti!=null)
{
打印分析结果(tweetSenti);
}
}
}
您能告诉我为什么会出现此错误以及如何修复它吗?

我能够获得列表中第一条推文的关键短语和情感,然后我得到了以下例外,我不知道为什么:

根据您的描述,第二次和第一次的区别在于tweet对象。而(400)错误请求也意味着http请求客户端参数不正确

我可以在tweet.TweetText
等于null或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;

    }

您必须查看
异常
对象。它可能会提供一些详细信息,说明为什么您的请求是
错误请求(400)