API の呼び出しを容易にするために、プロジェクトに Alibaba Cloud SDK を統合することを推奨します。SDK は開発プロセスを簡素化し、機能を迅速に統合し、運用保守コストを大幅に削減します。Alibaba Cloud SDK を統合するには、Alibaba Cloud SDK のインストール、アクセス認証情報の設定、SDK の使用という手順を実行します。このトピックでは、Alibaba Cloud SDK の統合方法について説明します。
前提条件
.Net Framework 4.5 以降、または .Net Standard 2.0 以降
C# 5.0 以降
SDK のインポート
SDK Center にログインし、使用する SDK のサービスを選択します。 この例では、Short Message Service (SMS) が選択されています。
[Short Message Service] ページで、[すべての言語] セクションで [C#] を選択します。[クイックスタート] タブで、Short Message Service (SMS) SDK のインストール方法を取得します。
GitHub でソースコードと関連するインストールガイドラインを表示することもできます。詳細については、「GitHub - aliyun/alibabacloud-csharp-sdk」をご参照ください。
アクセス認証情報の設定
Alibaba Cloud サービスの API 操作を呼び出すには、AccessKey ペアやセキュリティトークンサービス (STS) トークンなどのアクセス認証情報を設定する必要があります。AccessKey ペアの漏洩を防ぐために、AccessKey ペアを環境変数に記録できます。その他のセキュリティソリューションについては、「認証情報セキュリティソリューション」をご参照ください。この例では、ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET の環境変数を使用して AccessKey ペアを記録します。
Linux および macOS での環境変数の設定
export コマンドを使用した環境変数の設定
export コマンドを使用して設定された一時的な環境変数は、現在のセッションでのみ有効です。セッションを終了すると、設定された環境変数は無効になります。永続的な環境変数を設定するには、対応するオペレーティングシステムの起動設定ファイルに export コマンドを追加します。
AccessKey ID を設定し、Enter キーを押します。
# <ACCESS_KEY_ID> をご利用の AccessKey ID に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_ID=yourAccessKeyIDAccessKey Secret を設定し、Enter キーを押します。
# <ACCESS_KEY_SECRET> をご利用の AccessKey Secret に置き換えます。 export ALIBABA_CLOUD_ACCESS_KEY_SECRET=yourAccessKeySecret設定が成功したかどうかを確認します。
echo $ALIBABA_CLOUD_ACCESS_KEY_IDコマンドを実行します。有効な AccessKey ID が返された場合、環境変数は設定されています。
Windows での環境変数の設定
GUI の使用
手順
Windows 10 で GUI を使用して環境変数を設定する場合は、次の手順を実行します。
Windows のデスクトップで、[この PC] を右クリックし、[プロパティ] を選択します。表示されたページで、[システムの詳細設定] をクリックします。[システムのプロパティ] ダイアログボックスで、[詳細設定] タブの [環境変数] をクリックします。[環境変数] ダイアログボックスで、[ユーザー環境変数] または [システム環境変数] セクションの [新規] をクリックします。次に、次の表で説明されている変数を設定します。
変数
例
AccessKey ID
変数名:ALIBABA_CLOUD_ACCESS_KEY_ID
変数値:LTAI****************
AccessKey Secret
変数名:ALIBABA_CLOUD_ACCESS_KEY_SECRET
変数値:yourAccessKeySecret
設定が成功したかどうかを確認します。
Windows のデスクトップで、[スタート] をクリックするか、Win + R を押します。[ファイル名を指定して実行] ダイアログボックスで、cmd と入力します。次に、[OK] をクリックするか、Enter キーを押します。表示されたページで、
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%およびecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%コマンドを実行します。有効な AccessKey ペアが返された場合、設定は成功しています。
CMD の使用
手順
管理者としてコマンドプロンプトウィンドウを開き、次のコマンドを実行してオペレーティングシステムに環境変数を追加します。
setx ALIBABA_CLOUD_ACCESS_KEY_ID yourAccessKeyID /M setx ALIBABA_CLOUD_ACCESS_KEY_SECRET yourAccessKeySecret /M/Mは、環境変数がシステムレベルであることを示します。ユーザーレベルの環境変数を設定する場合は、このパラメーターを使用しないことも選択できます。設定が成功したかどうかを確認します。
Windows のデスクトップで、[スタート] をクリックするか、Win + R を押します。[ファイル名を指定して実行] ダイアログボックスで、cmd と入力します。次に、[OK] をクリックするか、Enter キーを押します。表示されたページで、
echo %ALIBABA_CLOUD_ACCESS_KEY_ID%およびecho %ALIBABA_CLOUD_ACCESS_KEY_SECRET%コマンドを実行します。有効な AccessKey ペアが返された場合、設定は成功しています。
Windows PowerShell の使用
PowerShell で、新しい環境変数を設定します。環境変数はすべての新しいセッションに適用されます。
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::User)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::User)すべてのユーザーの環境変数を設定します。次のコマンドを管理者として実行する必要があります。
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_ID', 'yourAccessKeyID', [System.EnvironmentVariableTarget]::Machine)
[System.Environment]::SetEnvironmentVariable('ALIBABA_CLOUD_ACCESS_KEY_SECRET', 'yourAccessKeySecret', [System.EnvironmentVariableTarget]::Machine)一時的な環境変数を設定します。環境変数は現在のセッションにのみ適用されます。
$env:ALIBABA_CLOUD_ACCESS_KEY_ID = "yourAccessKeyID"
$env:ALIBABA_CLOUD_ACCESS_KEY_SECRET = "yourAccessKeySecret"PowerShell で、Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_ID および Get-ChildItem env:ALIBABA_CLOUD_ACCESS_KEY_SECRET コマンドを実行します。有効な AccessKey ペアが返された場合、設定は成功しています。
SDK の使用
この例では、Short Message Service (SMS) の SendMessageToGlobe API 操作が呼び出されます。SendMessageToGlobe の詳細については、「SendMessageToGlobe」をご参照ください。
1. リクエストクライアントの初期化
SDK では、API 操作へのすべてのリクエストはクライアントから送信されます。API 操作を呼び出す前に、リクエストクライアントを初期化する必要があります。リクエストクライアントを初期化するには、複数のメソッドを使用できます。この例では、AccessKey ペアを使用してリクエストクライアントを初期化します。詳細については、「アクセス認証情報の管理」をご参照ください。
Dysmsapi Client インスタンスなどのクライアントオブジェクトはスレッドセーフであり、マルチスレッド環境でもセキュリティ上のリスクなく使用できます。スレッドごとにインスタンスを作成する必要はありません。
開発プロジェクトでは、`new` キーワードを使用してクライアントオブジェクトを頻繁に作成することは推奨されません。頻繁に作成すると、リソースの無駄が増え、サービスパフォーマンスが低下するおそれがあります。クライアントはシングルトンモードでカプセル化することを推奨します。これにより、アプリケーションライフサイクル全体にわたり、同一のアクセス認証情報と
endpointに対して、Client インスタンスが 1 つのみ初期化されることが保証されます。
public static AlibabaCloud.SDK.Dysmsapi20180501.Client CreateClient(){
AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
{
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID が設定されていることを確認してください。
AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// 必須。環境変数 ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
AccessKeySecret = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
};
config.Endpoint = "dysmsapi.aliyuncs.com";
return new AlibabaCloud.SDK.Dysmsapi20180501.Client(config);
}
2. リクエストオブジェクトの作成
API 操作を呼び出してパラメーターを渡すには、SDK が提供するリクエストオブジェクトを使用する必要があります。 API 操作のリクエストオブジェクトの名前は、<API operation name>Request というフォーマットに従います。 たとえば、SendMessageToGlobe API 操作のリクエストオブジェクトは SendMessageToGlobeRequest です。 パラメーターの詳細については、API リファレンスをご参照ください。 SendMessageToGlobe 操作のパラメーターの詳細については、「SendMessageToGlobe」をご参照ください。
API 操作がリクエストパラメーターをサポートしていない場合、リクエストオブジェクトを作成する必要はありません。 例えば、DescribeCdnSubList 操作はリクエストパラメーターをサポートしていません。
// リクエストオブジェクトを作成し、必須の入力パラメーターを設定します
AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest sendMessageToGlobeRequest = new AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeRequest
{
// 実際の受信者の番号に置き換えてください。
To = "<PHONE_NUMBER>",
// 実際の SMS の内容に置き換えてください。
Message = "<YOUR_MESSAGE>",
};3. クライアントがリクエストを開始します。
リクエスト クライアントを使用して API 操作を呼び出す場合、関数には次のフォーマットで名前を付けることをお勧めします: <API operation name>WithOptions。 この関数には、リクエスト オブジェクトと実行時パラメーターの 2 つのパラメーターが含まれています。 リクエスト オブジェクトは、前のステップで作成されます。 実行時パラメーターは、タイムアウトやプロキシ構成などのリクエスト アクションを指定するために使用されます。 詳細については、「高度な設定」をご参照ください。
API 操作がリクエストパラメーターをサポートしていない場合、リクエストにリクエストオブジェクトを指定する必要はありません。例えば、DescribeCdnSubList 操作を呼び出す場合、実行時パラメーターのみを指定します。
API 操作の応答オブジェクトを、次のフォーマットで命名します: <API operation name>Response。 たとえば、SendMessageToGlobe API 操作の応答オブジェクトは SendMessageToGlobeResponse です。
// 実行時パラメーターを作成します。
AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
AlibabaCloud.SDK.Dysmsapi20180501.Client client = CreateClient();
// リクエストを送信します。
AlibabaCloud.SDK.Dysmsapi20180501.Models.SendMessageToGlobeResponse response = client.SendMessageToGlobeWithOptions(sendMessageToGlobeRequest, runtime);4. エラー処理
V2.0 .NET SDK は、例外を TeaUnretryableException と TeaException に分類します。
TeaUnretryableException:ほとんどの場合、このタイプの例外はネットワークエラーが原因で発生し、最大リトライ回数に達したときにスローされます。
TeaException:ほとんどの場合、このタイプの例外はビジネスエラーが原因で発生します。
SDK の例外処理方法の詳細については、「例外処理」をご参照ください。
システムの堅牢性と安定性を確保するために、例外の報告、例外のログ記録、リトライの実行といった適切な例外処理対策を講じてください。
サンプルコード全体の表示
特殊なシナリオ:Advance 操作によるファイルのアップロード
オンプレミスのマシン上のイメージを処理したり、イメージをアップロードしたりするために Image Search または Visual Intelligence API (VIAPI) を使用する場合、ドキュメントに記載されている Image Search または VIAPI の API は直接アップロードをサポートしていません。イメージをアップロードするには、ファイルストリームの転送をサポートする Advance 操作を使用する必要があります。クラウドサービスは、アップロードされたファイルを Object Storage Service (OSS) に一時的に保存し、必要に応じて OSS から一時ファイルを読み取ります。OSS のデフォルトリージョンは cn-shanghai です。次の例では、VIAPI の DetectBodyCount 操作を呼び出す方法を示します。
OSS 内の一時ファイルは定期的にクリアされます。
リクエストクライアントの初期化
クラウドサービスの
RegionIdパラメーターとendpointの両方が指定されていることを確認してください。RegionIdは、一時ファイルが保存される OSS リージョンを示します。RegionIdパラメーターを設定しない場合、クラウドサービスが OSS とは異なるリージョンを使用し、API タイムアウトが発生する可能性があります。public static AlibabaCloud.SDK.Facebody20191230.Client CreateClient() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config { // 必須。次の環境変数がコード実行環境に設定されていることを確認してください:ALIBABA_CLOUD_ACCESS_KEY_ID。 AccessKeyId = Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), // 必須。次の環境変数がコード実行環境に設定されていることを確認してください: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); }リクエストオブジェクトの作成
<API 操作>AdvanceRequestリクエストオブジェクトを作成して、ファイルストリームを渡します。リクエストオブジェクトで、パラメーター名をImageURLObjectに設定します。AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest detectBodyCountAdvanceRequest = new AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountAdvanceRequest { ImageURLObject = File.OpenRead(@"<FILE_PATH>"), // <FILE_PATH> を実際のファイルパスに置き換えます。 };リクエストの開始
<API 操作名>Advance関数を呼び出してリクエストを開始します。// 実行時パラメーターを設定します。 AlibabaCloud.TeaUtil.Models.RuntimeOptions runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions(); AlibabaCloud.SDK.Facebody20191230.Client client = CreateClient(); // リクエストを送信します。 AlibabaCloud.SDK.Facebody20191230.Models.DetectBodyCountResponse response = client.DetectBodyCountAdvance(detectBodyCountAdvanceRequest, runtime); Console.WriteLine(AlibabaCloud.TeaUtil.Common.ToJSONString(response));
よくある質問
OpenAPI を呼び出すと、「You are not authorized to perform this operation」というエラーメッセージが表示されます。
原因:Resource Access Management (RAM) ユーザーが使用する AccessKey ペアに、API 操作を呼び出すための権限がありません。
解決策:RAM ユーザーに必要な権限を付与してください。詳細については、「RAM ユーザーへの権限付与」をご参照ください。
例えば、「You are not authorized to perform this operation」エラーが SendMessageToGlobe API 操作によってスローされた場合は、次のカスタムポリシーを作成して、RAM ユーザーに必要な権限を付与してください:
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "dysms:SendMessageToGlobe", "Resource": "*" } ] }OpenAPI を呼び出すと、次のエラーが返されます:「System.UnretryableException: One or more errors occurred.」
原因:リクエストクライアントの初期化時に指定したエンドポイントを、API 操作がサポートしていません。
解決策:サポートされているエンドポイントを指定して、再試行してください。詳細については、「エンドポイントの設定」をご参照ください。
OpenAPI の呼び出しで、次のエラーが返されます:ErrorCode":"InvalidAccessKeyId.NotFound","ErrorMessage":"Specified access key is not found."。
原因:AccessKey ペアがリクエストに正しく渡されていません。
解決策:リクエストクライアントを初期化する際に、AccessKey ペアが正しく渡されていることを確認してください。
Environment.GetEnvironmentVariable("XXX")は、XXXの値が環境変数から取得されることを示します。
SDK エラーの処理方法の詳細については、「よくある質問」をご参照ください。