.net core 从netcore3.1控制台应用程序访问Azure认知服务时未经授权
我有一个netcore控制台应用程序,它正在使用Microsoft.Azure.CognitiveServices.Language.TextAnalyticsNuget软件包中的客户端库访问Azure的文本分析API 尝试访问API时,我收到以下HttpException:.net core 从netcore3.1控制台应用程序访问Azure认知服务时未经授权,.net-core,azure-functions,microsoft-cognitive,azure-cognitive-services,.net Core,Azure Functions,Microsoft Cognitive,Azure Cognitive Services,我有一个netcore控制台应用程序,它正在使用Microsoft.Azure.CognitiveServices.Language.TextAnalyticsNuget软件包中的客户端库访问Azure的文本分析API 尝试访问API时,我收到以下HttpException: Unauthorized. Access token is missing, invalid, audience is incorrect (https://cognitiveservices.azure.co
Unauthorized. Access token is missing, invalid, audience is incorrect (https://cognitiveservices.azure.com), or have expired.
Unhandled exception. System.AggregateException: One or more errors occurred. (Operation returned an invalid status code 'Unauthorized')
当使用Azure函数上托管的完全相同的代码访问相同的API时,一切正常。我无法在文档或其他任何地方找到任何信息。请尝试下面的.net core console应用程序代码以使用TextAnalytics SDK:
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Azure.CognitiveServices.Language.TextAnalytics;
using Microsoft.Azure.CognitiveServices.Language.TextAnalytics.Models;
using Microsoft.Rest;
namespace TextAnalysis
{
class Program
{
private static readonly string key = "<your text analyisis service key>";
private static readonly string endpoint = "<your text analyisis service endpoint>";
static void Main(string[] args)
{
var client = authenticateClient();
sentimentAnalysisExample(client);
languageDetectionExample(client);
entityRecognitionExample(client);
keyPhraseExtractionExample(client);
Console.Write("Press any key to exit.");
Console.ReadKey();
}
static TextAnalyticsClient authenticateClient()
{
ApiKeyServiceClientCredentials credentials = new ApiKeyServiceClientCredentials(key);
TextAnalyticsClient client = new TextAnalyticsClient(credentials)
{
Endpoint = endpoint
};
return client;
}
class ApiKeyServiceClientCredentials : ServiceClientCredentials
{
private readonly string apiKey;
public ApiKeyServiceClientCredentials(string apiKey)
{
this.apiKey = apiKey;
}
public override Task ProcessHttpRequestAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
if (request == null)
{
throw new ArgumentNullException("request");
}
request.Headers.Add("Ocp-Apim-Subscription-Key", this.apiKey);
return base.ProcessHttpRequestAsync(request, cancellationToken);
}
}
static void sentimentAnalysisExample(ITextAnalyticsClient client)
{
var result = client.Sentiment("I had the best day of my life.", "en");
Console.WriteLine($"Sentiment Score: {result.Score:0.00}");
}
static void languageDetectionExample(ITextAnalyticsClient client)
{
var result = client.DetectLanguage("This is a document written in English.","us");
Console.WriteLine($"Language: {result.DetectedLanguages[0].Name}");
}
static void entityRecognitionExample(ITextAnalyticsClient client)
{
var result = client.Entities("Microsoft was founded by Bill Gates and Paul Allen on April 4, 1975, to develop and sell BASIC interpreters for the Altair 8800.");
Console.WriteLine("Entities:");
foreach (var entity in result.Entities)
{
Console.WriteLine($"\tName: {entity.Name},\tType: {entity.Type ?? "N/A"},\tSub-Type: {entity.SubType ?? "N/A"}");
foreach (var match in entity.Matches)
{
Console.WriteLine($"\t\tOffset: {match.Offset},\tLength: {match.Length},\tScore: {match.EntityTypeScore:F3}");
}
}
}
static void keyPhraseExtractionExample(TextAnalyticsClient client)
{
var result = client.KeyPhrases("My cat might need to see a veterinarian.");
// Printing key phrases
Console.WriteLine("Key phrases:");
foreach (string keyphrase in result.KeyPhrases)
{
Console.WriteLine($"\t{keyphrase}");
}
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Net.Http;
使用系统线程;
使用System.Threading.Tasks;
使用Microsoft.Azure.CognitiveServices.Language.TextAnalytics;
使用Microsoft.Azure.CognitiveServices.Language.TextAnalytics.Models;
使用微软.Rest;
命名空间文本分析
{
班级计划
{
私有静态只读字符串密钥=”;
私有静态只读字符串端点=”;
静态void Main(字符串[]参数)
{
var client=authenticateClient();
例如(客户);
语言检测示例(客户端);
实体识别示例(客户);
keyPhraseExtractionExample(客户端);
控制台。写入(“按任意键退出”);
Console.ReadKey();
}
静态文本分析客户端authenticateClient()
{
ApiKeyServiceClientCredentials凭据=新的ApiKeyServiceClientCredentials(密钥);
TextAnalyticsClient客户端=新的TextAnalyticsClient(凭据)
{
端点=端点
};
返回客户;
}
类ApiKeyServiceClientCredentials:ServiceClientCredentials
{
私有只读字符串密钥;
公共ApiKeyServiceClientCredentials(字符串apiKey)
{
this.apiKey=apiKey;
}
公共覆盖任务进程HttpRequestAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
if(请求==null)
{
抛出新的ArgumentNullException(“请求”);
}
request.Headers.Add(“Ocp Apim订阅密钥”,this.apiKey);
返回base.ProcessHttpRequestAsync(请求、取消令牌);
}
}
静态分析示例(ITextAnalyticsClient)
{
var result=client.personation(“我度过了我一生中最美好的一天。”,“en”);
Console.WriteLine($“情绪分数:{result.Score:0.00}”);
}
静态无效语言检测示例(ITextAnalyticsClient)
{
var result=client.DetectLanguage(“这是一个用英语编写的文档。”,“美国”);
Console.WriteLine($“语言:{result.DetectedLanguages[0].Name}”);
}
静态void entityRecognitionExample(ITextAnalyticsClient)
{
var result=client.Entities(“微软由比尔·盖茨和保罗·艾伦于1975年4月4日成立,为Altair 8800开发和销售基本口译员。”);
Console.WriteLine(“实体:”);
foreach(result.Entities中的var实体)
{
Console.WriteLine($“\t名称:{entity.Name},\t类型:{entity.Type??“N/A”},\t类型:{entity.SubType??“N/A”}”);
foreach(entity.Matches中的变量匹配)
{
Console.WriteLine($“\t\tOffset:{match.Offset},\t长度:{match.Length},\t中心:{match.EntityTypeScore:F3}”);
}
}
}
静态void关键字短语提取示例(TextAnalyticsClient)
{
var result=client.keyphases(“我的猫可能需要看兽医。”);
//打印关键短语
控制台。WriteLine(“关键短语:”);
foreach(result.keyphases中的字符串关键字短语)
{
WriteLine($“\t{keyphase}”);
}
}
}
}
您可以在Azure portal上的此处找到您的密钥和端点:
结果:
您好,您的问题解决了吗?