O Alibaba Cloud SDK V1.0 oferece suporte a um método universal, conhecido como chamada generalizada, para invocar a OpenAPI. Este tópico descreve como usar chamadas generalizadas para acessar a OpenAPI.
Recursos
Leveza: Apenas o pacote Core é necessário para fazer as chamadas. Não é preciso baixe e instale os SDKs de cada product.
Alta compatibilidade: Use chamadas generalizadas quando um product cloud ainda não disponibilizar um sdk ou quando uma nova API for lançada antes da atualização do sdk. Isso permite invocar as operações de API mais recentes sem aguardar atualizações do sdk.
Para mais informações, consulte Generalized calls and specialized calls.
Observações de uso
Antes de usar chamadas generalizadas, obtenha e configure manualmente os metadados da OpenAPI, como número da versão, URI da requisição e tipos de parâmetros. Para obter mais detalhes sobre o estilo da API, parâmetros de requisição e caminhos de recursos de uma OpenAPI, consulte OpenAPI metadata.
Instale o SDK core
Execute o comando abaixo no terminal para instale o SDK core. Para verificar a versão mais recente, acesse aliyun-net-sdk-core.
dotnet add package aliyun-net-sdk-core
Invoque uma OpenAPI
Inicialize um cliente de requisição
Crie um objeto DefaultAcsClient para inicializar o cliente de requisição. Este exemplo demonstra como usar uma AccessKey para inicializar o cliente. Para conhecer outros métodos de inicialização, consulte Manage access credentials.
Para evitar vazamento de credenciais, armazene-as em variáveis de ambiente. Para mais informações, consulte Configure environment variables in Linux, macOS, and Windows.
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Profile;
namespace AlibabaCloud.SDK.Sample
{
public class Sample
{
public static void Main(string[] args)
{
IClientProfile profile = DefaultProfile.GetProfile(
// The region ID.
"<REGION_ID>",
// Obtain the AccessKey ID of the Resource Access Management (RAM) user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Obtain the AccessKey secret of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
}
}
}
Configure as informações da OpenAPI e os parâmetros de requisição
Use CommonRequest para configure os parâmetros comuns de requisição e os parâmetros específicos exigidos pela OpenAPI. Para mais detalhes sobre os parâmetros comuns de requisição e seu uso, consulte Advanced settings.
Descrição dos parâmetros de requisição da API
Para saber como passar os parâmetros de requisição, verifique os metadados da OpenAPI correspondente à operação desejada. Por exemplo, as informações do parâmetro de requisição RegionId da operação DescribeInstanceStatus nos metadados são {"name":"RegionId","in":"query",...}}. Nesse caso, "in":"query" indica que o RegionId deve ser passado usando AddQueryParameters.
Descrição | Como passar o parâmetro |
Quando o parâmetro de requisição for exibido como | AddQueryParameters(string key,string value) Nota Se o parâmetro de requisição for uma coleção, passe os parâmetros no formato AddQueryParameters("key.1","value1"), AddQueryParameters("key.2","value2"), e assim por diante. |
Quando o parâmetro de requisição for exibido como | AddBodyParameters(string key,string value) Nota Se o parâmetro de requisição não for uma string, converta o valor do parâmetro para uma string JSON e atribua-o à variável |
Ao fazer upload de um arquivo. | SetContent(byte[] content,string charset,FormatType formatType) Nota Defina o parâmetro |
// 2. Create an API request and set the parameters.
CommonRequest request = new CommonRequest();
// 2.1 Set the common request parameters.
request.Domain = "ecs-cn-hangzhou.aliyuncs.com"; // The endpoint supported by the cloud product.
request.Version = "2014-05-26"; // The API version of the cloud product.
request.Action = "DescribeInstanceStatus"; // The name of the API operation. This parameter is required for RPC API operations but not for ROA API operations.
request.Method = MethodType.POST; // The request method. Valid values: MethodType.POST, MethodType.GET, MethodType.PUT, MethodType.DELETE, MethodType.HEAD, and MethodType.OPTIONS.
request.Protocol = ProtocolType.HTTPS; // The request protocol. Valid values: ProtocolType.HTTPS and ProtocolType.HTTP.
request.TimeoutInMilliSeconds = 1000; // The timeout period.
// request.UriPattern = "/"; // The resource path. This parameter is required for ROA API operations. Do not set this parameter for RPC API operations.
// 2.2 Set the API-specific request parameters.
// Scenario 1: Set query parameters using AddQueryParameters(string key, string value).
request.AddQueryParameters("RegionId", "cn-hangzhou");
List<string> instanceIds = new List<string> { "i-bp124uve8zq7XXXXXXXX", "i-bp1axhql4dqaXXXXXXXX" };
for (int i = 0; i < instanceIds.Count; i++) {
request.AddQueryParameters($"InstanceId.{i + 1}" , instanceIds[i]);
}
request.AddQueryParameters("PageNumber", "1");
request.AddQueryParameters("PageSize", "30");
// Scenario 2: Set body parameters using AddBodyParameters(string key, string value).
// request.AddBodyParameters("key1", "value1");
// request.AddBodyParameters("key2", "value2");
// Scenario 3: Upload a file using SetContent(byte[] content, string charset, FormatType formatType). The formatType parameter must be set to FormatType.RAW.
// byte[] content = File.ReadAllBytes(@"<FILE_PATH>");
// request.SetContent(content, "UTF-8",FormatType.RAW);
Inicie uma requisição
Use o client criado na etapa anterior para chamar o método GetCommonResponse e iniciar a requisição.
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
Exemplo: Chame uma API no estilo RPC
O código a seguir mostra como usar o CommonRequest para chamar a operação DescribeInstanceStatus do ECS:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// Create a client instance to initiate a request.
IClientProfile profile = DefaultProfile.GetProfile(
// The region ID.
"cn-hangzhou",
// Obtain the AccessKey ID of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Obtain the AccessKey secret of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// Construct a request.
CommonRequest request = new CommonRequest();
request.Domain = "ecs.aliyuncs.com";
request.Version = "2014-05-26";
// Because this is an RPC API operation, you must specify ApiName(Action).
request.Action = "DescribeInstanceStatus";
request.AddQueryParameters("RegionId", "cn-hangzhou");
List<string> instanceIds = new List<string> { "i-bp124uve8zq7XXXXXXXX", "i-bp1axhql4dqaXXXXXXXX" };
for (int i = 0; i < instanceIds.Count; i++) {
request.AddQueryParameters($"InstanceId.{i + 1}" , instanceIds[i]);
}
request.AddQueryParameters("PageNumber", "1");
request.AddQueryParameters("PageSize", "30");
// Initiate the request and obtain the response.
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
}
catch (ServerException ex)
{
System.Console.WriteLine(ex.ToString());
}
catch (ClientException ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}
Exemplo: Chame uma API no estilo RESTful (ROA)
O código abaixo demonstra como usar o CommonRequest para chamar uma operação de API do Container Service e visualize todas as instâncias de cluster:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// Create a client to initiate a request.
IClientProfile profile = DefaultProfile.GetProfile(
// The region ID.
"<REGION-ID>",
// Obtain the AccessKey ID of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Obtain the AccessKey secret of the RAM user from an environment variable.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// Construct a request.
CommonRequest request = new CommonRequest();
request.Domain = "cs.aliyuncs.com";
request.Version = "2015-12-15";
// Because this is a RESTful API operation, you must specify UriPattern.
request.UriPattern = "/clusters";
// Initiate the request and obtain the response.
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
}
catch (ServerException ex)
{
System.Console.WriteLine(ex.ToString());
}
catch (ClientException ex)
{
System.Console.WriteLine(ex.ToString());
}
}
}
Perguntas frequentes
-
A mensagem de erro "The input parameter \"AccessKeyId\" that is mandatory for processing this request is not supplied." é retornada.
Causa: A AccessKey não está configurada corretamente.
Solução:
-
Execute os comandos a seguir para verificar se as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET estão configuradas corretamente:
Linux/macOS
echo $ALIBABA_CLOUD_ACCESS_KEY_ID echo $ALIBABA_CLOUD_ACCESS_KEY_SECRETWindows
echo %ALIBABA_CLOUD_ACCESS_KEY_ID% echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%Se a AccessKey correta for retornada, a configuração foi bem-sucedida. Caso o valor retornado esteja vazio ou incorreto, defina as variáveis de ambiente novamente. Para mais informações, consulte Configure environment variables in Linux, macOS, and Windows.
-
Verifique se há erros relacionados à AccessKey no seu código.
Exemplos de falhas comuns:
AccessKeyId = Environment.GetEnvironmentVariable("yourAccessKeyID"), AccessKeySecret = Environment.GetEnvironmentVariable("yourAccessKeySecret"),Exemplo correto:
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
-
-
A mensagem de erro "Unhandled exception. Aliyun.Acs.Core.Exceptions.ClientException: SDK.WebException : HttpWebRequest WebException occurred, the request url is XXX.cn-hangzhou.aliyuncs.com System.Net.WebException: An error occurred while sending the request." é retornada.
Causa: O parâmetro UriPattern foi definido nos parâmetros comuns de requisição para uma operação de API RPC.
Solução: Remova o parâmetro UriPattern dos parâmetros comuns de requisição.