Alibaba Cloud SDK V1.0 for .NET は、汎用 API 呼び出しをサポートしています。このトピックでは、Alibaba Cloud SDK V1.0 for .NET を使用して汎用呼び出しを行う方法について説明します。
特徴
軽量: コア パッケージのみをダウンロードする必要があります。 Alibaba Cloud サービスの SDK をダウンロードしてインストールする必要はありません。
高い互換性: クラウド サービスが SDK を提供していない場合、または SDK が最新の API 操作用に更新されていない場合、汎用呼び出しを行うことができます。 この方法では、SDK の更新を待つことなく、最新の API 操作を呼び出すことができます。
詳細については、「汎用呼び出しと専用呼び出し」をご参照ください。
使用上の注意
汎用呼び出しを行う前に、API バージョン、リクエスト URL、パラメーター タイプなど、必要なメタデータを手動で取得して指定します。 詳細については、「API メタデータ」をご参照ください。
Alibaba Cloud SDK のコア ライブラリをインストールする
ターミナルで次のコマンドを実行して、Alibaba Cloud SDK V1.0 for .NET のコア ライブラリをインストールします。 コア ライブラリの最新バージョンについては、「aliyun-net-sdk-core」をご参照ください。
dotnet add package aliyun-net-sdk-coreAPI 操作を呼び出す
リクエスト クライアントを初期化する
DefaultAcsClient オブジェクトを作成し、リクエスト クライアントを初期化します。 この例では、AccessKey ペアを使用してリクエスト クライアントを初期化します。 その他の初期化方法については、「アクセス認証情報の管理」をご参照ください。
AccessKey の漏洩を防ぐために、AccessKey ペアを環境変数に記録できます。 詳細については、「Linux、macOS、および 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(
// リージョン ID を指定します。
"<REGION_ID>",
// Resource Access Management (RAM) ユーザーの AccessKey ID を環境変数から取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// RAM ユーザーの AccessKey シークレットを環境変数から取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
}
}
}API 操作情報とリクエスト パラメーターを構成する
CommonRequest を使用して、API 操作の共通リクエスト パラメーターと操作固有のパラメーターを構成します。 共通リクエスト パラメーターの詳細については、「詳細設定」をご参照ください。
操作固有のパラメーター
リクエスト パラメーターの渡し方は、API 操作のメタデータによって決まります。 たとえば、DescribeInstanceStatus API 操作は、メタデータで {"name":"RegionId","in":"query",...}} として定義されています。 この場合、"in":"query" は、リージョン ID (RegionId) を AddQueryParameters で渡す必要があることを示しています。
説明 | パラメーターの渡し方 |
| AddQueryParameters(string key,string value) 説明 リクエスト パラメーターでコレクションが指定されている場合は、AddQueryParameters("key.1","value1") および AddQueryParameters("key.2","value2") の形式でリクエスト パラメーターを渡します。 |
| AddBodyParameters(string key,string value) 説明 リクエスト パラメーターで文字列が指定されていない場合は、パラメーター値を JSON 文字列に変換し、その文字列を変数値として指定します。 |
ファイルをアップロードする | SetContent(byte[] content,string charset,FormatType formatType) 説明 formatType を FormatType.RAW に設定します。 |
// 2. API リクエストを作成し、リクエスト パラメーターを構成します。
CommonRequest request = new CommonRequest();
// 2.1 共通リクエスト パラメーターを構成します。
request.Domain = "ecs-cn-hangzhou.aliyuncs.com"; // サービスのエンドポイント。
request.Version = "2014-05-26"; // サービスの API バージョン。
request.Action = "DescribeInstanceStatus"; // API 操作の名前。 操作名は、リモートプロシージャコール (RPC) API 操作には必須であり、リソース指向アーキテクチャ (ROA) API 操作にはオプションです。
request.Method = MethodType.POST; // リクエストメソッド。 値: MethodType.POST、MethodType.GET、MethodType.PUT、MethodType.DELETE、MethodType.HEAD、および MethodType.OPTIONS。
request.Protocol = ProtocolType.HTTPS; // リクエストプロトコル。 有効な値: ProtocolType.HTTPS および ProtocolType.HTTP。
request.TimeoutInMilliSeconds = 1000; // タイムアウト期間。
// request.UriPattern = "/"; // リソースパス。 ROA スタイルの API 操作で必要です。 RPC スタイルの API 操作では、このパラメーターを構成しないでください。
// 2.2 操作固有のパラメーターを構成します。
// シナリオ 1: 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");
// シナリオ 2: AddBodyParameters(string key,string value) でボディパラメーターを指定します。
// request.AddBodyParameters("key1", "value1");
// request.AddBodyParameters("key2", "value2");
// シナリオ 3: ファイルをアップロードするには、SetContent(byte[] content,string charset,FormatType formatType) を指定します。 formatType を FormatType.RAW に設定します。
// byte[] content = File.ReadAllBytes(@"<FILE_PATH>");
// request.SetContent(content, "UTF-8",FormatType.RAW);
リクエストを開始する
前の手順で作成した client を使用し、GetCommonResponse メソッドを呼び出してリクエストを開始します。
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);例: RPC スタイルの API 操作を呼び出す
次のサンプル コードは、CommonRequest を使用して ECS の DescribeInstanceStatus 操作を呼び出す方法の例を示しています。
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// リクエストを開始するためのクライアント インスタンスを作成します。
IClientProfile profile = DefaultProfile.GetProfile(
// リージョン ID を指定します。
"cn-hangzhou",
// RAM ユーザーの AccessKey ID を環境変数から取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// RAM ユーザーの AccessKey ID を環境変数から取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// リクエストを構築します。
CommonRequest request = new CommonRequest();
request.Domain = "ecs.aliyuncs.com";
request.Version = "2014-05-26";
// RPC API 操作の 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");
// リクエストを開始し、レスポンスを取得します。
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());
}
}
}例: RESTful スタイル (ROA スタイル) の API 操作を呼び出す
次のサンプル コードは、CommonRequest を使用して ACK の API 操作を呼び出し、すべてのクラスターをクエリする方法の例を示しています。
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// リクエストを開始するためのクライアント インスタンスを作成します。
IClientProfile profile = DefaultProfile.GetProfile(
// リージョン ID を指定します。
"<REGION-ID>",
// RAM ユーザーの AccessKey ID を環境変数から取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// RAM ユーザーの AccessKey ID を環境変数から取得します。
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// リクエストを構築します。
CommonRequest request = new CommonRequest();
request.Domain = "cs.aliyuncs.com";
request.Version = "2015-12-15";
// Restful API 操作の UriPattern パラメーターの値を指定します。
request.UriPattern = "/clusters";
// リクエストを開始し、レスポンスを取得します。
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());
}
}
}よくある質問
「このリクエストの処理に必須の入力パラメーター \"AccessKeyId\" が提供されていません。」というエラー メッセージが返された場合はどうすればよいですか?
原因: AccessKey ペアが正しく構成されていません。
解決策:
次のコマンドを実行して、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が構成されているかどうかを確認します。
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%有効な AccessKey ペアが返された場合、環境変数は正しく構成されています。 AccessKey ペアが返されない場合、または無効な AccessKey ペアが返された場合は、必要に応じて環境変数を構成します。 詳細については、「Linux、macOS、および Windows で環境変数を構成する」をご参照ください。
コード内で AccessKey ペアに関連するエラーを確認します。
エラー リクエストの例:
AccessKeyId = Environment.GetEnvironmentVariable("yourAccessKeyID"), AccessKeySecret = Environment.GetEnvironmentVariable("yourAccessKeySecret"),成功リクエストの例:
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
「処理されていない例外。 Aliyun.Acs.Core.Exceptions.ClientException: SDK.WebException : HttpWebRequest WebException が発生しました。リクエスト URL は XXX.cn-hangzhou.aliyuncs.com System.Net.WebException: リクエストの送信中にエラーが発生しました。」というエラー メッセージが返された場合はどうすればよいですか?
原因: RPC スタイルの API 操作の共通リクエスト パラメーターで UriPattern パラメーターが構成されています。
解決策: 共通リクエスト パラメーターから UriPattern パラメーターを削除します。