Skip to content

C# SDK クイックスタート

このガイドでは、C# SDK を使用して一般的な操作を実行するためのクイックスタートガイドを提供します。 SDK のインストール方法、アクセス認証情報の設定方法、最新のアップグレード情報の取得などの基本操作を学びます。

注意事項

  • C# SDK を使用してリクエストを送信するには、Client インスタンスを初期化する必要があります。この記事では、デフォルト設定を読み込むことで Client を作成します。詳細な設定オプションについては、「クライアントの設定」を参照してください。

前提条件

  • UpgradeLink アカウントを登録していること。
  • AccessKey と AccessSecret を取得していること。
  • Windows アプリケーションのアップグレード戦略を設定していること。

認証情報の取得

img.jpg

インストール

NuGet 経由でのインストール

  • Visual Studio に NuGet がインストールされていない場合は、まず NuGet をインストールしてください。
  • NuGet をインストールした後、Visual Studio で新しいプロジェクトを作成するか既存のプロジェクトを開き、<ツール> - <NuGet パッケージマネージャー> - <ソリューションの NuGet パッケージの管理> を選択します。
  • ToolsetLink.UpgradeLinkApi を検索し、結果で ToolsetLink.UpgradeLinkApi を見つけて最新バージョンを選択し、インストールをクリックしてプロジェクトに追加します。

GitHub 経由でのインストール

  • git がインストールされていない場合は、まず git をインストールしてください。
  • git clone https://github.com/toolsetlink/upgradelink-api-csharp.git
  • ソースコードをダウンロードした後、以下の「プロジェクト統合方法」に従ってインストールします。

プロジェクト統合方法

  • GitHub から SDK パッケージまたはソースコードをダウンロードし、ソースからインストールしたい場合は、<ソリューション> を右クリックし、コンテキストメニューで <追加> -> <既存のプロジェクト> をクリックします。
  • 表示されるダイアログで、upgradeLinkApiCSharp.csproj ファイルを選択し、開くをクリックします。
  • 次に、<あなたのプロジェクト> - <参照> を右クリックし、<参照の追加> を選択し、表示されるダイアログで <プロジェクト> タブを選択し、upgradeLinkApiCSharp プロジェクトにチェックを入れて、OK をクリックします。

クイックスタート

次の例は、Client を初期化して Win アプリケーションの最新のアップグレード情報を取得する方法を示しています。

Win アプリケーションの最新アップグレード情報を取得する

csharp
using System;
using System.Reflection;
using NUnit.Framework;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using ToolsetLink.UpgradeLinkApi;
using ToolsetLink.UpgradeLinkApi.Models;

namespace UpgradeLinkApi.Tests
{
    [TestFixture]
    public class ClientTests
    {
        // [NameInMap] 属性を処理するためのカスタム JSON コントラクトリゾルバー
        private class NameInMapContractResolver : DefaultContractResolver
        {
            protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
            {
                JsonProperty property = base.CreateProperty(member, memberSerialization);
                
                // NameInMap 属性を見つける
                var nameInMapAttribute = member.GetCustomAttribute(typeof(Tea.NameInMapAttribute)) as Tea.NameInMapAttribute;
                if (nameInMapAttribute != null)
                {
                    // JSON フィールド名として NameInMap 属性の値を使用する
                    property.PropertyName = nameInMapAttribute.Name;
                }
                
                return property;
            }
        }
        
        // カスタム JSON シリアル化設定
        private static readonly JsonSerializerSettings _jsonSettings = new JsonSerializerSettings
        {
            ContractResolver = new NameInMapContractResolver(),
            NullValueHandling = NullValueHandling.Ignore
        };
        
        private Client _client;
        private Config _config;

        [SetUp]
        public void Setup()
        {
            // テスト用にクライアントを構成する
            _config = new Config
            {
                AccessKey = "mui2W50H1j-OC4xD6PgQag",
                AccessSecret = "PEbdHFGC0uO_Pch7XWBQTMsFRxKPQAM2565eP8LJ3gc",
                // Protocol = "HTTP",
                // Endpoint = "127.0.0.1:8888"
            };
            
            _client = new Client(_config);
        }

        [Test]
        public void WinUpgrade_Should_Send_Request_And_Print_Result()
        {
            // 準備
            var request = new WinUpgradeRequest
            {
                WinKey = "npJi367lttpwmD1goZ1yOQ",
                Arch = "x64",
                VersionCode = 1,
                AppointVersionCode = 0,
                DevModelKey = "",
                DevKey = ""
            };

            // 実行
            try
            {
                Console.WriteLine("WinUpgrade リクエストを送信しています...");
                // リクエスト情報を出力
                Console.WriteLine("リクエスト情報:");
                Console.WriteLine($"  WinKey: {request.WinKey}");
                Console.WriteLine($"  Arch: {request.Arch}");
                Console.WriteLine($"  VersionCode: {request.VersionCode}");
                Console.WriteLine($"  AppointVersionCode: {request.AppointVersionCode}");
                Console.WriteLine($"  DevModelKey: {request.DevModelKey}");
                Console.WriteLine($"  DevKey: {request.DevKey}");
                
                // リクエストボディをシリアル化して出力する(クライアントと同じカスタムコントラクトリゾルバーを使用)
                string bodyStr = Newtonsoft.Json.JsonConvert.SerializeObject(request, _jsonSettings);
                Console.WriteLine($"シリアル化されたリクエストボディ: {bodyStr}");
                Console.WriteLine("注: 上記のリクエストボディは、実際のリクエストで使用されるシリアル化形式と一致します");
                
                var response = _client.WinUpgrade(request);
                Console.WriteLine("リクエストが成功しました!");
                Console.WriteLine($"response.code: {response.Code}");
                Console.WriteLine($"response.msg: {response.Msg}");
                Console.WriteLine($"response.traceId: {response.TraceId}");
                
                // レスポンスデータを出力する(クライアントと同じカスタムコントラクトリゾルバーを使用)
                if (response.Data != null)
                {
                    Console.WriteLine($"Data: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Data, _jsonSettings)}");
                }
            }
            catch (Tea.TeaException ex)
            {
                Console.WriteLine("リクエストに失敗しました - TeaException の詳細:");
                Console.WriteLine($"例外メッセージ: {ex.Message}");
                
                // TeaException の内部プロパティを取得するためにリフレクションを使用
                var properties = ex.GetType().GetProperties();
                foreach (var property in properties)
                {
                    try
                    {
                        var value = property.GetValue(ex);
                        Console.WriteLine($"{property.Name}: {value}");
                    }
                    catch (Exception)
                    {
                        // アクセスできないプロパティをスキップ
                    }
                }
                
                // 例外の Data プロパティを出力
                if (ex.Data != null)
                {
                    Console.WriteLine("例外データ:");
                    foreach (var key in ex.Data.Keys)
                    {
                        Console.WriteLine($"  {key}: {ex.Data[key]}");
                    }
                }
                
                Console.WriteLine($"スタックトレース: {ex.StackTrace}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"リクエストに失敗しました: {ex.Message}");
                Console.WriteLine($"例外タイプ: {ex.GetType().Name}");
                Console.WriteLine($"スタックトレース: {ex.StackTrace}");
            }

            // アサート: 結果を出力することのみに関心があるため、テストは常に合格します
            Assert.Pass("WinUpgrade リクエストが送信され、結果が出力されました");
        }
        
    }
}

toolsetlink@163.com