C# Azure关键字短语API有时返回400
我得到的Azure关键词API的结果好坏参半——有时是成功的(我指的是200个结果),有时是400个错误请求。为了测试该服务,我将从他们的NoSQL服务上的Azure PDF发送内容 文档中说,每个文档最多可以包含5k个字符。为了排除这种可能性,(我从5k开始)我将每个限制为最多1k个字符 我如何才能获得有关故障原因的更多信息?我已经检查了门户,但是没有太多细节 我正在使用此端点: 一些示例失败:C# Azure关键字短语API有时返回400,c#,azure,microsoft-cognitive,azure-cognitive-services,text-analytics-api,C#,Azure,Microsoft Cognitive,Azure Cognitive Services,Text Analytics Api,我得到的Azure关键词API的结果好坏参半——有时是成功的(我指的是200个结果),有时是400个错误请求。为了测试该服务,我将从他们的NoSQL服务上的Azure PDF发送内容 文档中说,每个文档最多可以包含5k个字符。为了排除这种可能性,(我从5k开始)我将每个限制为最多1k个字符 我如何才能获得有关故障原因的更多信息?我已经检查了门户,但是没有太多细节 我正在使用此端点: 一些示例失败: {“文档”:[{“语言”:“en”,“id”:1,“文本”:“David Chappell了解M
- {“文档”:[{“语言”:“en”,“id”:1,“文本”:“David Chappell了解Microsoft Azure上的NoSQL,由Microsoft Corporation赞助版权所有©2014 Chappell&Associates”}]}
- {“文档”:[{“语言”:“en”,“id”:1,“text”:“3几十年来,关系技术一直是处理数据的主要方法。通常使用结构化查询语言(SQL)访问,关系数据库非常有用。正如它们的流行所表明的那样,它们可以应用于许多不同的情况。但关系技术并不总是最好的方法。假设您需要处理大量数据,例如,太多数据无法存储在一台机器上。扩展关系技术以有效地工作跨许多服务器(物理或虚拟)可能是一个挑战。或者假设您的应用程序使用的数据不适合关系系统,例如JavaScript对象表示法(JSON)文档。将数据硬塞进关系表是可能的,但专门设计用于处理此类信息的存储技术可能更简单。NoSQL技术是为了解决此类问题而创建的。顾名思义,标签包含各种存储“}]}
List<string> sendRequest(object data)
{
string url = "https://eastus.api.cognitive.microsoft.com/text/analytics/v2.0/keyPhrases";
string key = "api-code-here";
string hdr = "Ocp-Apim-Subscription-Key";
var wc = new WebClient();
wc.Headers.Add(hdr, key);
wc.Headers.Add(HttpRequestHeader.ContentType, "application/json");
TextAnalyticsResult results = null;
string json = JsonConvert.SerializeObject(data);
try
{
var bytes = Encoding.Default.GetBytes(json);
var d2 = wc.UploadData(url, bytes);
var dataString = Encoding.Default.GetString(d2);
results = JsonConvert.DeserializeObject<TextAnalyticsResult>(dataString);
}
catch (Exception ex)
{
var s = ex.Message;
}
System.Threading.Thread.Sleep(125);
if (results != null && results.documents != null)
return results.documents.SelectMany(x => x.keyPhrases).ToList();
else
return new List<string>();
}
试着换一行
var bytes = Encoding.Default.GetBytes(json);
到
试着换一行
var bytes = Encoding.Default.GetBytes(json);
到
我使用您指出有错误的文档示例手动创建了一些请求,服务正确地处理了这些请求并返回了关键短语。因此,可能会出现编码问题 将来,您还可以查看服务返回的内部错误。通常,您会在下面的响应示例中看到更多细节
{
"code": "BadRequest",
"message": "Invalid request",
"innerError": {
"code": "InvalidRequestContent",
"message": "Request contains duplicated Ids. Make sure each document has a unique Id."
}
}
此外,还有一个用于文本分析的.NET SDK,可以帮助简化服务调用。
我使用您指出有错误的文档示例手动创建了一些请求,服务正确地处理了这些请求并返回了关键短语。因此,可能会出现编码问题 将来,您还可以查看服务返回的内部错误。通常,您会在下面的响应示例中看到更多细节
{
"code": "BadRequest",
"message": "Invalid request",
"innerError": {
"code": "InvalidRequestContent",
"message": "Request contains duplicated Ids. Make sure each document has a unique Id."
}
}
此外,还有一个用于文本分析的.NET SDK,可以帮助简化服务调用。
请显示您向客户发出请求的代码API@MariaInesParnisari更新代码样本请显示您向客户发出请求的代码API@MariaInesParnisari更新了代码示例,这一更改有所帮助。我正在处理的PDF有15个段落——如果我在所有1个请求中发送它们,作为15个文档,每个文档的字符数不到5k,它将再次返回400个段落。但是,如果我作为15个单独的请求(1个文档/请求)发送,每个请求都会得到处理。显然,我的id值存在问题:是这样添加的:id=data.documents.Count()+1。当更改为id=rnd.Next(11000)+data.documents.Count()+1时,批提交工作正常。我只是在一个列表中循环发送它们,没有并发处理。这种改变很有帮助。我正在处理的PDF有15个段落——如果我在所有1个请求中发送它们,作为15个文档,每个文档的字符数不到5k,它将再次返回400个段落。但是,如果我作为15个单独的请求(1个文档/请求)发送,每个请求都会得到处理。显然,我的id值存在问题:是这样添加的:id=data.documents.Count()+1。当更改为id=rnd.Next(11000)+data.documents.Count()+1时,批提交工作正常。我只是在一个列表中循环发送它们,没有并发处理;StatusDescription只是“坏请求”。我很想得到错误描述,这样我就可以在我这边修复它。正如在另一篇文章中提到的——如果我单独提交,没有问题——只有当它是一批多个文档时。我验证了我对每个document.FYI都有唯一的ID-抛出异常:var d2=wc.UploadData(url,字节);我建议您在这里使用CognitiveServices控制台确认您的多文档json请求负载是有效的:我在WebException对象中没有看到该信息;StatusDescription只是“坏请求”。我很想得到错误描述,这样我就可以在我这边修复它。正如在另一篇文章中提到的——如果我单独提交,没有问题——只有当它是一批多个文档时。我验证了我对每个document.FYI都有唯一的ID-抛出异常:var d2=wc.UploadData(url,字节);我建议您使用CognitiveServices控制台确认您的多文档json请求负载有效: