C# 为什么连接到文本分析API时出现(400)错误请求错误?
我是一名新的C#开发者,我正在尝试在我的测试ASP.NET应用程序中使用文本分析API和Azure机器学习来定义我在数据库中的推文的情感和关键短语。 我阅读了这篇有用的文章,以便能够连接到文本分析API。在调试我的代码时,我能够获得列表中第一条tweet的关键短语和情感,然后我得到了以下异常,我不知道为什么: 远程服务器返回错误:(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
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)