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 в результатах, выберите последнюю версию и нажмите Install для добавления его в ваш проект.

Установка через GitHub

  • Если git не установлен, пожалуйста, сначала установите git.
  • git clone https://github.com/toolsetlink/upgradelink-api-csharp.git
  • После загрузки исходного кода установите его в соответствии с "Способом интеграции проекта" ниже.

Способ интеграции проекта

  • Если вы загрузили пакет SDK или исходный код с GitHub и хотите установить из исходников, щелкните правой кнопкой мыши <Solution> и в контекстном меню нажмите <Add> -> <Existing Project>.
  • В появившемся диалоговом окне выберите файл upgradeLinkApiCSharp.csproj и нажмите Open.
  • Далее щелкните правой кнопкой мыши <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
    {
        // Пользовательский разрешитель контрактов JSON для обработки атрибута [NameInMap]
        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
        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($"Данные: {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