C# 无法对dialogflow v2和v2beta1上的REST API请求进行身份验证

C# 无法对dialogflow v2和v2beta1上的REST API请求进行身份验证,c#,authentication,dialogflow-es,gcloud,C#,Authentication,Dialogflow Es,Gcloud,问题是您必须但没有对呼叫进行身份验证 我鼓励您在与谷歌的服务交互时考虑使用谷歌提供的客户端库。手工制作URL、分段身份验证、日志记录等,并通过不断发展的API维护通用性,将给您带来数不清的工作 使用SDK要简单得多,建议使用SDK,并且经常受到支持,而且这些SDK保证可以正常工作 有关DialogFlow,请参见: 基于REST的(所谓的API客户端)库可用于谷歌所有服务的同一组语言。对于谷歌云平台服务,也可以使用更多的惯用库。这些被称为云客户端库 API的V2/V2beta1依赖于Googl

问题是您必须但没有对呼叫进行身份验证

我鼓励您在与谷歌的服务交互时考虑使用谷歌提供的客户端库。手工制作URL、分段身份验证、日志记录等,并通过不断发展的API维护通用性,将给您带来数不清的工作

使用SDK要简单得多,建议使用SDK,并且经常受到支持,而且这些SDK保证可以正常工作

有关DialogFlow,请参见:


基于REST的(所谓的API客户端)库可用于谷歌所有服务的同一组语言。对于谷歌云平台服务,也可以使用更多的惯用库。这些被称为云客户端库

API的V2/V2beta1依赖于Google云平台服务帐户进行身份验证,而不是以前使用的客户端和开发人员访问令牌

生成服务帐户密钥 为了使用V2 API,您需要创建一个新的服务帐户并获取与该服务帐户关联的私钥。在创建服务帐户时,密钥将作为JSON文件下载

注意:您的项目将有一个现有的服务帐户,但不应更改此帐户。对于其他客户端和开发人员API访问,您应该创建一个新的服务帐户。

  • 请首先登录到Dialogflow控制台并选择适当的项目(仅当您有多个项目时)。转到Dialogflow的设置并单击服务帐户链接,如下所示:
  • 注意:还要确保启用测试版功能和API。

  • 现在,这将重定向到您的GCP服务帐户页面。从那里,您需要单击导航菜单(左上角)并选择API&Services>Credentials

  • 现在单击创建凭据并选择服务帐户密钥。 注意:请注意,如果您有多个项目链接到您的GCP,请从下拉列表中选择适当的项目,并从“所有”选项卡而不是“最近”选项卡中选择您的项目

  • 现在从下拉列表中选择“新建服务帐户”。请为此服务帐户指定一个名称,并确保选择要拥有的角色。选择JSON(默认情况下为选中)

  • 现在点击创建按钮。您的JSON密钥文件将下载到您的系统中

  • 现在使用这个JSON密钥文件来验证您的请求

  • 现在从VisualStudio上的nuget软件包管理器下载V2/V2Beta1 API

    请参阅此代码:

    var rFile = GoogleCredential.FromFile(jsonkeyfilepath);
            var scopeC = rFile.CreateScoped(DialogflowService.Scope.CloudPlatform);
            var response = new DialogflowService(new BaseClientService.Initializer
            {
                HttpClientInitializer = scopeC,
                ApplicationName = "project-name-here"
            }).Projects.Agent.Sessions.DetectIntent(
                        new GoogleCloudDialogflowV2beta1DetectIntentRequest
                        {
                            QueryInput = new GoogleCloudDialogflowV2beta1QueryInput
                            {
                                Text = new GoogleCloudDialogflowV2beta1TextInput
                                {
                                    Text = "your text here",
                                    LanguageCode = "en-US"
                                }
                            }
                        },
                        $"projects/projectid/agent/sessions/34141414")
                        .Execute();
            return (JsonConvert.SerializeObject(response.QueryResult));
    
    请参阅。