Alibaba Cloud SDK V1.0 untuk .NET mendukung panggilan API generik. Dokumen ini menjelaskan cara membuat panggilan generik menggunakan Alibaba Cloud SDK V1.0 untuk .NET.
Karakteristik
Ringan: Anda hanya perlu mengunduh paket inti tanpa harus menginstal SDK dari layanan Alibaba Cloud.
Kompatibilitas tinggi: Jika layanan cloud tidak menyediakan SDK atau SDK belum diperbarui untuk operasi API terbaru, Anda dapat menggunakan panggilan generik untuk memanggil operasi API terbaru tanpa menunggu pembaruan SDK.
Untuk informasi lebih lanjut, lihat Panggilan Generik dan Panggilan Spesifik.
Catatan penggunaan
Sebelum membuat panggilan generik, peroleh dan tentukan metadata yang diperlukan secara manual, termasuk versi API, URL permintaan, dan tipe parameter. Untuk informasi lebih lanjut, lihat Metadata API.
Instal pustaka inti Alibaba Cloud SDK
Jalankan perintah berikut di terminal untuk menginstal pustaka inti Alibaba Cloud SDK V1.0 untuk .NET. Untuk informasi lebih lanjut tentang versi terbaru pustaka inti, lihat aliyun-net-sdk-core.
dotnet add package aliyun-net-sdk-corePanggil operasi API
Inisialisasi klien permintaan
Buat objek DefaultAcsClient dan inisialisasi klien permintaan. Dalam contoh ini, sepasang AccessKey digunakan untuk menginisialisasi klien permintaan. Untuk metode inisialisasi lainnya, lihat Kelola Kredensial Akses.
Untuk mencegah kebocoran AccessKey, Anda dapat mencatat pasangan AccessKey dalam variabel lingkungan. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan 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(
// Tentukan ID wilayah.
"<REGION_ID>",
// Peroleh ID AccessKey dari pengguna Resource Access Management (RAM) dari variabel lingkungan.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Peroleh rahasia AccessKey dari pengguna RAM dari variabel lingkungan.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
}
}
}Konfigurasikan informasi operasi API dan parameter permintaan
Gunakan CommonRequest untuk mengonfigurasi parameter permintaan umum dan parameter spesifik operasi untuk operasi API. Untuk informasi lebih lanjut tentang parameter permintaan umum, lihat Pengaturan Lanjutan.
Parameter spesifik operasi
Cara parameter permintaan dilewatkan ditentukan oleh metadata operasi API. Sebagai contoh, operasi API DescribeInstanceStatus didefinisikan sebagai {"name":"RegionId","in":"query",...}} dalam metadata. Dalam hal ini, "in":"query" menunjukkan bahwa ID wilayah (RegionId) harus dilewatkan di AddQueryParameters.
Deskripsi | Cara parameter dilewatkan |
| AddQueryParameters(string key,string value) Catatan Jika parameter permintaan menentukan koleksi, lewatkan parameter permintaan dalam format berikut: AddQueryParameters("key.1","value1") dan AddQueryParameters("key.2","value2"). |
| AddBodyParameters(string key,string value) Catatan Jika parameter permintaan tidak menentukan string, ubah nilai parameter menjadi string JSON dan tetapkan string tersebut sebagai nilai variabel. |
Unggah file | SetContent(byte[] content,string charset,FormatType formatType) Catatan Tetapkan formatType ke FormatType.RAW. |
// 2. Buat permintaan API dan konfigurasikan parameter permintaan.
CommonRequest request = new CommonRequest();
// 2.1 Konfigurasikan parameter permintaan umum.
request.Domain = "ecs-cn-hangzhou.aliyuncs.com"; // Titik akhir layanan.
request.Version = "2014-05-26"; // Versi API layanan.
request.Action = "DescribeInstanceStatus"; // Nama operasi API. Nama operasi diperlukan untuk operasi API RPC dan opsional untuk operasi API ROA.
request.Method = MethodType.POST; // Metode permintaan. Nilai valid: MethodType.POST, MethodType.GET, MethodType.PUT, MethodType.DELETE, MethodType.HEAD, dan MethodType.OPTIONS.
request.Protocol = ProtocolType.HTTPS; // Protokol permintaan. Nilai valid: ProtocolType.HTTPS dan ProtocolType.HTTP.
request.TimeoutInMilliSeconds = 1000; // Periode timeout.
// request.UriPattern = "/"; // Jalur sumber daya, yang diperlukan oleh operasi API bergaya ROA. Jangan konfigurasikan parameter ini untuk operasi API bergaya RPC.
// 2.2 Konfigurasikan parameter spesifik operasi.
// Skenario 1: Tentukan parameter query di 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");
// Skenario 2: Tentukan parameter body di AddBodyParameters(string key,string value).
// request.AddBodyParameters("key1", "value1");
// request.AddBodyParameters("key2", "value2");
// Skenario 3: Untuk mengunggah file, tentukan SetContent(byte[] content,string charset,FormatType formatType). Tetapkan formatType ke FormatType.RAW.
// byte[] content = File.ReadAllBytes(@"<FILE_PATH>");
// request.SetContent(content, "UTF-8",FormatType.RAW);
Mulai permintaan
Gunakan client yang dibuat pada langkah sebelumnya dan panggil metode GetCommonResponse untuk memulai permintaan.
CommonResponse response = client.GetCommonResponse(request);
System.Console.WriteLine(response.Data);Contoh: Panggil operasi API bergaya RPC
Kode sampel berikut memberikan contoh tentang cara menggunakan CommonRequest untuk memanggil operasi DescribeInstanceStatus dari ECS:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// Buat instance klien untuk memulai permintaan.
IClientProfile profile = DefaultProfile.GetProfile(
// Tentukan ID wilayah.
"cn-hangzhou",
// Peroleh ID AccessKey dari pengguna RAM dari variabel lingkungan.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Peroleh RAHASIA AccessKey dari pengguna RAM dari variabel lingkungan.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// Bangun permintaan.
CommonRequest request = new CommonRequest();
request.Domain = "ecs.aliyuncs.com";
request.Version = "2014-05-26";
// Tentukan nilai parameter ApiName (Action) untuk operasi API RPC.
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");
// Mulai permintaan dan peroleh respons.
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());
}
}
}Contoh: Panggil operasi API bergaya RESTful (ROA)
Kode sampel berikut memberikan contoh tentang cara menggunakan CommonRequest untuk memanggil operasi API ACK untuk menanyakan semua kluster:
using Aliyun.Acs.Core;
using Aliyun.Acs.Core.Exceptions;
using Aliyun.Acs.Core.Profile;
class Sample
{
static void Main(string[] args)
{
// Buat instance klien untuk memulai permintaan.
IClientProfile profile = DefaultProfile.GetProfile(
// Tentukan ID wilayah.
"<REGION-ID>",
// Peroleh ID AccessKey dari pengguna RAM dari variabel lingkungan.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"),
// Peroleh RAHASIA AccessKey dari pengguna RAM dari variabel lingkungan.
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
try
{
// Bangun permintaan.
CommonRequest request = new CommonRequest();
request.Domain = "cs.aliyuncs.com";
request.Version = "2015-12-15";
// Tentukan nilai parameter UriPattern untuk operasi API Restful.
request.UriPattern = "/clusters";
// Mulai permintaan dan peroleh respons.
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
Apa yang harus saya lakukan jika pesan kesalahan "The input parameter \"AccessKeyId\" that is mandatory for processing this request is not supplied." dikembalikan?
Penyebab: Pasangan AccessKey tidak dikonfigurasi dengan benar.
Solusi:
Jalankan perintah berikut untuk memeriksa apakah variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET dikonfigurasi.
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%Jika pasangan AccessKey yang valid dikembalikan, variabel lingkungan telah dikonfigurasi dengan benar. Jika tidak ada pasangan AccessKey atau pasangan AccessKey yang tidak valid dikembalikan, konfigurasikan variabel lingkungan sesuai kebutuhan. Untuk informasi lebih lanjut, lihat Konfigurasikan Variabel Lingkungan di Linux, macOS, dan Windows.
Periksa kesalahan terkait pasangan AccessKey dalam kode.
Contoh permintaan kesalahan:
AccessKeyId = Environment.GetEnvironmentVariable("yourAccessKeyID"), AccessKeySecret = Environment.GetEnvironmentVariable("yourAccessKeySecret"),Contoh permintaan sukses:
Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_ID"), Environment.GetEnvironmentVariable("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
Apa yang harus saya lakukan jika pesan kesalahan "Unhandled exception. Aliyun.Acs.Core.Exceptions.ClientException: SDK.WebException : HttpWebRequest WebException occured, the request url is XXX.cn-hangzhou.aliyuncs.com System.Net.WebException: An eile sending the request." dikembalikan?
Penyebab: Parameter UriPattern dikonfigurasi dalam parameter permintaan umum operasi API bergaya RPC.
Solusi: Hapus parameter UriPattern dari parameter permintaan umum.