Le SDK Alibaba Cloud V1.0 prend en charge une méthode universelle, appelée appel généralisé, pour appeler les API OpenAPI. Cette rubrique explique comment utiliser les appels généralisés pour accéder aux API OpenAPI.
Fonctionnalités
Légèreté : seul le package Core est nécessaire pour effectuer des appels. Inutile de télécharger et d'installer les SDK de chaque produit.
Compatibilité élevée : utilisez les appels généralisés lorsqu'un produit cloud ne propose pas encore de SDK, ou lorsqu'une nouvelle API est publiée mais que le SDK n'est pas à jour. Vous pouvez ainsi appeler les dernières opérations d'API sans attendre les mises à jour du SDK.
Pour plus d'informations, consultez la section Appels généralisés et appels spécialisés.
Remarques sur l'utilisation
Avant d'utiliser les appels généralisés, vous devez obtenir et configurer manuellement les métadonnées de l'API OpenAPI, telles que le numéro de version, l'URI de la requête et les types de paramètres. Pour plus d'informations sur le style d'API, les paramètres de requête et les chemins d'accès aux ressources d'une API OpenAPI, consultez la section Métadonnées de l'API OpenAPI.
Installer le SDK principal
Exécutez la commande suivante dans le terminal pour installer le SDK principal. Pour connaître la dernière version, consultez la page aliyun-net-sdk-core.
dotnet add package aliyun-net-sdk-core
Appeler une API OpenAPI
Initialiser un client de requête
Créez un objet DefaultAcsClient pour initialiser le client de requête. Cet exemple montre comment utiliser une clé AccessKey pour initialiser le client. Pour plus d'informations sur les autres méthodes d'initialisation, consultez la section Gérer les identifiants d'accès.
Pour éviter la divulgation des identifiants, stockez-les dans des variables d'environnement. Pour plus d'informations, consultez la section Configurer les variables d'environnement sous Linux, macOS et 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);
}
}
}
Configurer les informations de l'API OpenAPI et les paramètres de requête
Utilisez CommonRequest pour configurer les paramètres de requête communs et les paramètres de requête spécifiques à l'API requis par l'OpenAPI. Pour plus d'informations sur les paramètres de requête communs et leur utilisation, consultez la section Paramètres avancés.
Description des paramètres de requête de l'API
Pour savoir comment transmettre les paramètres de requête, consultez les métadonnées de l'API OpenAPI correspondant à l'opération d'API. Par exemple, les informations relatives au paramètre de requête RegionId de l'opération DescribeInstanceStatus dans les métadonnées sont {"name":"RegionId","in":"query",...}}. Dans ce cas, "in":"query" indique que RegionId est transmis à l'aide de AddQueryParameters.
Description | Méthode de transmission du paramètre |
Lorsque le paramètre de requête s'affiche sous la forme | AddQueryParameters(string key,string value) Remarque Si le paramètre de requête est une collection, transmettez les paramètres au format AddQueryParameters("key.1","value1"), AddQueryParameters("key.2","value2"), etc. |
Lorsque le paramètre de requête s'affiche sous la forme | AddBodyParameters(string key,string value) Remarque Si le paramètre de requête n'est pas une chaîne, convertissez la valeur du paramètre en une chaîne JSON et attribuez-la à la variable |
Lors du téléchargement d'un fichier. | SetContent(byte[] content,string charset,FormatType formatType) Remarque Définissez le paramètre |
// 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);
Envoyer une requête
Utilisez le client créé à l'étape précédente pour appeler la méthode GetCommonResponse et envoyer la requête.
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);
Exemple : Appeler une API de style RPC
Le code suivant montre comment utiliser CommonRequest pour appeler l'opération DescribeInstanceStatus d'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());
}
}
}
Exemple : Appeler une API de style RESTful (ROA)
Le code suivant montre comment utiliser CommonRequest pour appeler une opération d'API de Container Service afin d'afficher toutes les instances 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());
}
}
}
FAQ
-
Le message d'erreur « The input parameter \"AccessKeyId\" that is mandatory for processing this request is not supplied. » s'affiche.
Cause : la clé AccessKey n'est pas configurée correctement.
Solution :
-
Exécutez les commandes suivantes pour vérifier si les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET sont configurées correctement :
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%Si la clé AccessKey correcte s'affiche, la configuration est réussie. Si la valeur renvoyée est vide ou incorrecte, définissez à nouveau les variables d'environnement. Pour plus d'informations, consultez la section Configurer les variables d'environnement sous Linux, macOS et Windows.
-
Vérifiez votre code pour détecter les erreurs liées à la clé AccessKey.
Exemples d'erreurs courantes :
AccessKeyId = Environment.GetEnvironmentVariable("yourAccessKeyID"), AccessKeySecret = Environment.GetEnvironmentVariable("yourAccessKeySecret"),Exemple correct :
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
-
-
Le message d'erreur « 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. » s'affiche.
Cause : le paramètre UriPattern est défini dans les paramètres de requête communs pour une opération d'API RPC.
Solution : supprimez le paramètre UriPattern des paramètres de requête communs.