すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud SDK:汎化呼び出し

最終更新日:Sep 12, 2026

Alibaba Cloud SDK V1.0 は、OpenAPI を呼び出すための汎用的なメソッドである「汎化呼び出し」をサポートしています。このトピックでは、汎化呼び出しを使用して OpenAPI にアクセスする方法を説明します。

特徴

  • 軽量:呼び出しにはコアパッケージのみが必要です。各製品の SDK をダウンロードしてインストールする必要はありません。

  • 高い互換性:クラウド製品がまだ SDK を提供していない場合や、新しい API がリリースされても SDK が更新されていない場合でも、汎化呼び出しを使用できます。これにより、SDK の更新を待たずに最新の API オペレーションを呼び出すことができます。

詳細については、「汎化呼び出しと特化呼び出し」をご参照ください。

注意事項

汎化呼び出しを使用する前に、バージョン番号、リクエスト URI、パラメータータイプなどの OpenAPI メタデータを手動で取得して設定する必要があります。OpenAPI の API スタイル、リクエストパラメーター、リソースパスの詳細については、「OpenAPI メタデータ」をご参照ください。

コア SDK のインストール

ターミナルで次のコマンドを実行して、コア SDK をインストールします。最新バージョンについては、「aliyun-net-sdk-core」をご参照ください。

dotnet add package aliyun-net-sdk-core

OpenAPI の呼び出し

リクエストクライアントの初期化

DefaultAcsClient オブジェクトを作成して、リクエストクライアントを初期化します。この例では、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 Secret を取得します。
                Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
            DefaultAcsClient client = new DefaultAcsClient(profile);
        }
    }
}

OpenAPI 情報とリクエストパラメーターの設定

CommonRequest を使用して、OpenAPI で必要な共通リクエストパラメーターと API 固有のリクエストパラメーターを設定します。共通リクエストパラメーターとその使用方法の詳細については、「高度な設定」をご参照ください。

API リクエストパラメーターの説明

リクエストパラメーターを渡す方法については、対応する API オペレーションの OpenAPI メタデータを参照してください。たとえば、メタデータ内の DescribeInstanceStatus オペレーションの RegionId リクエストパラメーターの情報は {"name":"RegionId","in":"query",...}} です。この場合、"in":"query" は、RegionId が AddQueryParameters を使用して渡すことを示します。

説明

パラメーターの渡し方

リクエストパラメーターが "in":"query" の場合。

AddQueryParameters(string key, string value)

説明

リクエストパラメーターがコレクションの場合、AddQueryParameters("key.1", "value1")、AddQueryParameters("key.2", "value2") のような形式でパラメーターを渡します。

リクエストパラメーターが "in":"body" または "in": "formData" の場合。

AddBodyParameters(string key, string value)

説明

リクエストパラメーターが文字列でない場合は、パラメーター値を JSON 文字列に変換し、value 変数に割り当てます。

ファイルをアップロードする場合。

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 API 固有のリクエストパラメーターを設定します。
        // シナリオ 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 を使用して Elastic Compute Service (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 Secret を取得します。
            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 を使用して Container Service (CS) の 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 Secret を取得します。
            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());
        }
    }
}

よくある質問

  1. 「The input parameter \"AccessKeyId\" that is mandatory for processing this request is not supplied.」というエラーメッセージが返ります。

    原因: AccessKey が正しく設定されていません。

    解決策:

    1. 次のコマンドを実行して、ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が正しく設定されているかどうかを確認します:

      Linux/macOS

      echo $ALIBABA_CLOUD_ACCESS_KEY_ID
      echo $ALIBABA_CLOUD_ACCESS_KEY_SECRET

      Windows

      echo %ALIBABA_CLOUD_ACCESS_KEY_ID%
      echo %ALIBABA_CLOUD_ACCESS_KEY_SECRET%

      正しい AccessKey が返された場合は、設定は成功です。返された値が空または正しくない場合は、環境変数を再度設定してください。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。

    2. AccessKey に関連するコードに誤りがないか確認してください。

      よくある誤りの例:

      AccessKeyId = Environment.GetEnvironmentVariable("yourAccessKeyID"),
      AccessKeySecret = Environment.GetEnvironmentVariable("yourAccessKeySecret"),

      正しい例:

      Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), 
      Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
  2. 「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.」というエラーメッセージが返ります。

    原因: RPC API オペレーションの共通リクエストパラメーターに UriPattern パラメーターが設定されています。

    解決策: 共通リクエストパラメーターから UriPattern パラメーターを削除してください。