Todos os produtos
Search
Central de documentação

Alibaba Cloud SDK:Integre o Alibaba Cloud SDK V2.0 para .NET

Última atualização: Sep 23, 2026

Integre o Alibaba Cloud SDK ao seu projeto .NET para simplificar as chamadas de API e reduzir os custos de manutenção. A integração envolve três etapas: instalar o SDK, configurar uma credencial de acesso e chamar as operações de API.

Pré-requisitos

  • .NET Framework 4.5 ou posterior, ou .NET Standard 2.0 ou posterior.

  • C# 5,0 ou posterior.

Instale o SDK

  1. Acesse SDK Center e selecione o service cujo SDK você deseja usar. Neste exemplo, Short Message Service (SMS) está selecionado.

  2. Na página Short Message Service, selecione C# na seção All languages. Na aba Quick Start, obtenha o método de instalação do SDK do Short Message Service (SMS).image

Nota

Visualize o código-fonte e as diretrizes de instalação no GitHub.

Configure uma credencial de acesso

Chamar operações OpenAPI requer credenciais de acesso, como AccessKey ou Security Token Service (STS) token. Armazene as credenciais em variáveis de ambiente para evitar vazamentos. Para conhecer as melhores práticas, consulte Securely use access credentials. Os exemplos a seguir utilizam as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET.

Configuration method in Linux and macOS

Os exemplos a seguir utilizam ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET como nomes de variável. Substitua-os pelos seus próprios nomes, se necessário, como OSS_ACCESS_KEY_ID e OSS_ACCESS_KEY_SECRET.

Execute os seguintes comandos export para definir as variáveis de ambiente:

Importante

As variáveis definidas com export são temporárias e válidas apenas para a sessão atual. Para torná-las persistentes, adicione o comando export ao arquivo de inicialização do seu shell (como ~/.bashrc ou ~/.zshrc).

  • Defina o AccessKey ID:

    # Replace yourAccessKeyID with your AccessKey ID.
    export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyID
  • Defina o AccessKey secret:

    # Replace yourAccessKeySecret with your AccessKey secret.
    export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret
  • Verifique a configuração.

    Execute echo $ALIBABA_CLOUD_ACCESS_KEY_ID. Se o valor correto for retornado, a configuração foi bem-sucedida.

Configuration method in Windows

Use the graphical user interface (GUI)

  • Procedimento

    As etapas a seguir descrevem como definir variáveis de ambiente pela GUI no Windows 10.

    Na área de trabalho, clique com o botão direito em This PC e escolha Properties > Advanced system settings > Environment Variables > New em System variables ou User variables. Em seguida, conclua a configuração.

    Variable

    Example value

    AccessKey ID

    • Variable name: ALIBABA_CLOUD_ACCESS_KEY_ID

    • Variable value: yourAccessKeyID

    AccessKey secret

    • Variable name: ALIBABA_CLOUD_ACCESS_KEY_SECRET

    • Variable value: yourAccessKeySecret

  • Teste a configuração

    Clique em Start (ou use o atalho Win+R), clique em Run, insira cmd, e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Use the command prompt (CMD)

  • Procedimento

    Abra o prompt de comando como administrador e execute os seguintes comandos para adicionar novas variáveis de ambiente ao sistema.

    setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M
    setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M

    O parâmetro /M indica uma variável de ambiente do sistema. Omita-o quando precisar definir uma variável de ambiente de usuário.

  • Teste a configuração

    Clique em Start (ou use o atalho Win+R), clique em Run, insira cmd, e clique em OK (ou pressione Enter) para abrir o prompt de comando. Execute os comandos echo %ALIBABA_CLOUD_ACCESS_KEY_ID% e echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Use Windows PowerShell

No PowerShell, é possível definir novas variáveis de ambiente válidas para todas as novas sessões:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)

Para definir variáveis de ambiente para todos os usuários, são necessárias permissões administrativas:

[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)

Também é possível definir variáveis de ambiente temporárias, válidas apenas para a sessão atual:

$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"

No PowerShell, execute os comandos Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID e Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET. Se os comandos retornarem o AccessKey correto, a configuração foi bem-sucedida.

Use o SDK

Este exemplo chama a operação SendMessageToGlobe do Short Message Service (SMS). Para mais informações sobre SendMessageToGlobe, consulte SendMessageToGlobe.

1. Inicialize um cliente de requisição

Todas as requisições de API são enviadas por meio de um objeto client. Inicialize o client antes de chamar qualquer operação de API. Há vários métodos de inicialização disponíveis. Este exemplo utiliza um par de AccessKey. Para mais informações, consulte Manage access credentials.

Importante
  • Objetos client (como instâncias do Dysmsapi Client) são thread-safe. Não é necessário criar uma instância para cada thread.

  • Evite criar objetos client frequentemente com a palavra-chave new — isso desperdiça recursos e degrada o desempenho. Adote o padrão singleton para garantir apenas uma instância de Client por credencial de acesso e endpoint.

 public static AlibabaCloud.SDK.Dysmsapi20180501.Client CreateClient(){
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
            config.Endpoint = "dysmsapi.aliyuncs.com";
            return new AlibabaCloud.SDK.Dysmsapi20180501.Client(config);
        }

2. Crie um objeto de requisição

Cada operação de API possui um objeto de requisição chamado <nome da operação de API>Request. Por exemplo, o objeto de requisição de SendMessageToGlobe é SendMessageToGlobeRequest. Para mais informações sobre os parâmetros da operação SendMessageToGlobe, consulte SendMessageToGlobe.

Nota

Se uma operação de API não tiver parâmetros de requisição, ignore o objeto de requisição. Por exemplo, a operação DescribeCdnSubList não requer parâmetros de requisição.

// Create request object and set required input parameters
AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest sendMessageToGlobeRequest = new AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest
            {   
                // Please replace with the actual recipient number.
                To = "<PHONE_NUMBER>",
                // Please replace with the actual SMS content.
                Message = "<YOUR_MESSAGE>",
            };

3. Envie a requisição

Chame a operação de API usando o método <nome da operação de API>WithOptions. Esse método recebe dois parâmetros: o objeto de requisição da etapa anterior e um parâmetro de runtime para configurações de timeout e proxy. Para mais informações, consulte Advanced configuration.

Nota

Se uma operação de API não tiver parâmetros de requisição, apenas o parâmetro de runtime é necessário. Por exemplo, somente o parâmetro de runtime é necessário ao chamar a operação DescribeCdnSubList.

O objeto de resposta é chamado <nome da operação de API>Response. Por exemplo, o objeto de resposta da operação de API SendMessageToGlobe é SendMessageToGlobeResponse.

 // Create runtime parameters.
 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
 AlibabaCloud.SDK.Dysmsapi20180501.Client client = CreateClient();
 // Send a request.
 AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeResponse response = client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);

4. Trate os erros

O SDK classifica as exceções em dois tipos:

  • TeaUnretryableException: normalmente causada por erros de rede. É lançada quando o número máximo de tentativas é atingido.

  • TeaException: normalmente causada por erros de negócio.

Para mais informações sobre como tratar exceções do SDK, consulte Exception handling.

Importante

Implemente o tratamento adequado de exceções — incluindo relatório, log e novas tentativas — para garantir a estabilidade do sistema.

Clique para ver o código de exemplo completo

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

using Tea;
using Tea.Utils;
namespace AlibabaCloud.SDK.Sample
{
    public class Sample 
    {
        public static AlibabaCloud.SDK.Dysmsapi20180501.Client CreateClient()
        {
    
            AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
            {
                // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID is set.
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Required, please ensure that the environment variables ALIBABA_CLOUD_ACCESS_KEY_SECRET is set.
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
          
            config.Endpoint = "dysmsapi.aliyuncs.com";
            return new AlibabaCloud.SDK.Dysmsapi20180501.Client(config);
        }

        public static void Main(string[] args)
        {
            AlibabaCloud.SDK.Dysmsapi20180501.Client client = CreateClient();
            // Create request object and set required input parameters
            AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest sendMessageToGlobeRequest = new AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest
            {   
                // Please replace with the actual recipient number.
                To = "<PHONE_NUMBER>",
                // Please replace with the actual SMS content.
                Message = "<YOUR_MESSAGE>",
            };
            AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
            try
            {
                // Copy the code to run, please print the return value of the API by yourself.
                client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);
            }
            catch (TeaException error)
            {
                // Only a printing example. Please be careful about exception handling and do not ignore exceptions directly in engineering projects.
                // print error message
                Console.WriteLine(error.Message);
                // Please click on the link below for diagnosis.
                Console.WriteLine(error.Data["Recommend"]);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(new Dictionary<string, object>
                {
                    { "message", _error.Message }
                });
                // Only a printing example. Please be careful about exception handling and do not ignore exceptions directly in engineering projects.
                // print error message
                Console.WriteLine(error.Message);
                // Please click on the link below for diagnosis.
                Console.WriteLine(error.Data["Recommend"]);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }

    }
}

Upload de arquivos com a operação Advance

Ao usar o Image Search ou o Visual Intelligence API (VIAPI) para processar ou fazer upload de imagens locais, a API padrão não oferece suporte a uploads diretos de arquivos. Use a operação Advance para fazer upload de arquivos por meio de streams. O service armazena temporariamente os arquivos enviados no OSS (região padrão: cn-shanghai) e os lê quando necessário. O exemplo a seguir chama a operação DetectBodyCount do VIAPI:

Nota

Os arquivos temporários no OSS são limpos periodicamente.

  1. Inicialize um cliente de requisição

    Especifique tanto o RegionId quanto o endpoint do service. O RegionId define a região do OSS para o armazenamento temporário de arquivos. Se o RegionId não estiver definido, o service poderá usar uma região diferente, causando timeouts na API.

    public static AlibabaCloud.SDK.Facebody20191230.Client CreateClient()
    {
        AlibabaCloud.OpenApiClient.Models.Config config =
            new AlibabaCloud.OpenApiClient.Models.Config
            {
                // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
                AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
                AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
            };
        config.RegionId = "cn-shanghai";
        config.Endpoint = "facebody.cn-shanghai.aliyuncs.com";
        return new AlibabaCloud.SDK.Facebody20191230.Client(config);
    }
  2. Crie um objeto de requisição

    Crie o objeto de requisição <operação de API>AdvanceRequest e defina ImageURLObject para passar o stream do arquivo.

    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest detectBodyCountAdvanceRequest =
        new AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest
        {
            ImageURLObject = File.OpenRead(@"<FILE_PATH>"), // Replace <FILE_PATH> with the actual file path.
        };   
  3. Envie a requisição

    Chame o método <nome da operação de API>Advance para enviar a requisição.

    // Configure the runtime parameters.
    AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
    AlibabaCloud.SDK.Facebody20191230.Client client = CreateClient();
    // Send the request.
    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountResponse response = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
    Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(response));

Clique para ver o código de exemplo completo

// dotnet add package AlibabaCloud.SDK.Facebody20191230 --version 4.1.2

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Tea;
using Tea.Utils;

namespace AlibabaCloud.SDK.Sample
{
    public class Sample
    {
        public static AlibabaCloud.SDK.Facebody20191230.Client CreateClient()
        {
            AlibabaCloud.OpenApiClient.Models.Config config =
                new AlibabaCloud.OpenApiClient.Models.Config
                {
                    // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_ID. 
                    AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
                    // Required. Make sure that the following environment variable is set in the code runtime environment: ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
                    AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
                };
            config.RegionId = "cn-shanghai";
            config.Endpoint = "facebody.cn-shanghai.aliyuncs.com";
            return new AlibabaCloud.SDK.Facebody20191230.Client(config);
        }

        public static void Main(string[] args)
        {
            try
            {
                AlibabaCloud.SDK.Facebody20191230.Client client = CreateClient();
                // Replace <FILE_PATH> with the actual file path.
                using (FileStream fileStream = File.OpenRead(@"<FILE_PATH>"))
                {
                    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest detectBodyCountAdvanceRequest =
                        new AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest
                        {
                            ImageURLObject = fileStream,
                        };
                    AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
                    AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountResponse response =
                        client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime);
                    Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(response));
                }
            }
            catch (TeaException error)
            {
                // Handle exceptions with caution based on your actual business scenario and do not ignore exceptions in your project. The error messages displayed in this example are for reference only. 
                Console.WriteLine(error.Message);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
            catch (Exception _error)
            {
                TeaException error = new TeaException(
                    new Dictionary<string, object> { { "message", _error.Message } }
                );
                // Handle exceptions with caution based on your actual business scenario and do not ignore exceptions in your project. The error messages displayed in this example are for reference only. 
                Console.WriteLine(error.Message);
                AlibabaCloud.TeaUtil.Common.AssertAsString(error.Message);
            }
        }
    }
}

Perguntas frequentes

  • Como tratar o erro "You are not authorized to perform this operation" lançado por uma operação de API?

    Causa: o par de AccessKey do usuário RAM não tem as permissões necessárias.

    Solução: conceda as permissões necessárias ao usuário RAM. Para mais informações, consulte Manage RAM user permissions.

    Por exemplo, se o erro "You are not authorized to perform this operation" for lançado pela operação de API SendMessageToGlobe, crie a seguinte política personalizada para conceder as permissões necessárias ao usuário RAM:

    {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": "dysms:SendMessageToGlobe",
          "Resource": "*"
        }
      ]
    }
  • Como tratar o erro "System.UnretryableException: One or more errors occurred" lançado por uma operação de API?

    Causa: o endpoint especificado não é compatível com esta operação de API.

    Solução: especifique um endpoint compatível e tente novamente. Para mais informações, consulte Configure endpoints.

  • Como tratar o erro "ErrorCode":"InvalidAccessKeyId.NotFound","ErrorMessage":"Specified access key is not found" lançado por uma operação de API?

    Causa: o par de AccessKey não foi passado corretamente.

    Solução: verifique se o par de AccessKey está sendo passado corretamente durante a inicialização do client. Environment.GetEnvironmentVariable("XXX") lê o valor de XXX a partir das variáveis de ambiente.

Para mais informações sobre como tratar erros do SDK, consulte .NET SDK FAQ.