Быстрый старт с C# SDK
Это руководство предоставляет быстрый старт по использованию C# SDK для выполнения обычных операций. Вы узнаете, как установить SDK, настроить учетные данные доступа и выполнить базовые операции для получения последней информации об обновлении.
Примечания
- Чтобы делать запросы с помощью C# SDK, вам нужно инициализировать экземпляр Client. В этой статье создается Client путем загрузки стандартной конфигурации. Для получения дополнительных вариантов конфигурации обратитесь к разделу Настройка клиента.
Предварительные требования
- У вас зарегистрирована учетная запись UpgradeLink.
- У вас получены AccessKey и AccessSecret.
- У вас настроена стратегия обновления Windows-приложения.
Получение учетных данных

Установка
Установка через 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 отправлен, результаты выведены");
}
}
}