.net core 从netcore3.1控制台应用程序访问Azure认知服务时未经授权

.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

我有一个netcore控制台应用程序,它正在使用Microsoft.Azure.CognitiveServices.Language.TextAnalyticsNuget软件包中的客户端库访问Azure的文本分析API

尝试访问API时,我收到以下HttpException:

      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上的此处找到您的密钥和端点:

结果:

您好,您的问题解决了吗?