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에서 프로젝트를 생성하거나 기존 프로젝트를 열고 <Tools> - <NuGet Package Manager> - <Manage NuGet Packages for Solution>을 선택하세요.
  • ToolsetLink.UpgradeLinkApi를 검색하고 결과에서 ToolsetLink.UpgradeLinkApi를 찾아 최신 버전을 선택한 후 설치를 클릭하여 프로젝트에 추가하세요.

GitHub를 통한 설치

프로젝트 통합 방법

  • GitHub에서 SDK 패키지 또는 소스 코드를 다운로드하고 소스에서 설치하려면 <Solution>을 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 <Add> -> <Existing Project>를 클릭하세요.
  • 나타나는 대화 상자에서 upgradeLinkApiCSharp.csproj 파일을 선택하고 열기를 클릭하세요.
  • 다음으로 <Your Project> - <References>를 마우스 오른쪽 버튼으로 클릭하고 <Add Reference>를 선택한 후 나타나는 대화 상자에서 <Projects> 탭을 선택하고 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)
                {
                    // NameInMap 특성의 값을 JSON 필드 이름으로 사용
                    property.PropertyName = nameInMapAttribute.Name;
                }
                
                return property;
            }
        }
        
        // 사용자 정의 JSON serialization 설정
        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("Sending WinUpgrade request...");
                // 요청 정보 출력
                Console.WriteLine("Request Information:");
                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($"Serialized Request Body: {bodyStr}");
                Console.WriteLine("Note: The request body above matches the serialization format used in the actual request");
                
                var response = _client.WinUpgrade(request);
                Console.WriteLine("Request successful!");
                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("Request failed - TeaException Details:");
                Console.WriteLine($"Exception Message: {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("Exception Data:");
                    foreach (var key in ex.Data.Keys)
                    {
                        Console.WriteLine($"  {key}: {ex.Data[key]}");
                    }
                }
                
                Console.WriteLine($"Stack Trace: {ex.StackTrace}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Request failed: {ex.Message}");
                Console.WriteLine($"Exception Type: {ex.GetType().Name}");
                Console.WriteLine($"Stack Trace: {ex.StackTrace}");
            }

            // Assert: 테스트는 결과를 출력하기만 하므로 항상 통과합니다
            Assert.Pass("WinUpgrade request has been sent, results have been printed");
        }
        
    }
}

toolsetlink@163.com