Skip to content

Inicio Rápido del SDK de C#

Esta guía proporciona un inicio rápido para usar el SDK de C# para operaciones comunes. Aprenderás cómo instalar el SDK, configurar las credenciales de acceso y realizar operaciones básicas para obtener la información de actualización más reciente.

Notas

  • Para hacer solicitudes usando el SDK de C#, necesitas inicializar una instancia de Client. Este artículo crea un Client cargando la configuración predeterminada. Para más opciones de configuración, por favor consulta Configuración del Cliente.

Requisitos Previos

  • Has registrado una cuenta de UpgradeLink.
  • Has obtenido el AccessKey y AccessSecret.
  • Has configurado una estrategia de actualización de aplicación Windows.

Obteniendo Credenciales

img.jpg

Instalación

Instalar a través de NuGet

  • Si NuGet no está instalado en tu Visual Studio, por favor instala NuGet primero.
  • Después de instalar NuGet, crea o abre un proyecto existente en Visual Studio, luego selecciona <Tools> - <NuGet Package Manager> - <Manage NuGet Packages for Solution>.
  • Busca ToolsetLink.UpgradeLinkApi, encuentra ToolsetLink.UpgradeLinkApi en los resultados, selecciona la versión más reciente y haz clic en Instalar para agregarlo a tu proyecto.

Instalar a través de GitHub

Método de Integración de Proyecto

  • Si has descargado el paquete del SDK o el código fuente desde GitHub y quieres instalar desde el código fuente, haz clic derecho en <Solution> y en el menú contextual, haz clic en <Add> -> <Existing Project>.
  • En el diálogo que aparece, selecciona el archivo upgradeLinkApiCSharp.csproj y haz clic en Abrir.
  • A continuación, haz clic derecho en <Your Project> - <References>, selecciona <Add Reference>, en el diálogo que aparece, selecciona la pestaña <Projects>, marca el proyecto upgradeLinkApiCSharp y haz clic en OK.

Inicio Rápido

El siguiente ejemplo demuestra cómo inicializar un Cliente y obtener la información de actualización más reciente para una aplicación Win.

Obtener la Información de Actualización Más Reciente para una Aplicación 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
    {
        // Resolver de contratos JSON personalizado para manejar el atributo [NameInMap]
        private class NameInMapContractResolver : DefaultContractResolver
        {
            protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
            {
                JsonProperty property = base.CreateProperty(member, memberSerialization);
                
                // Buscar atributo NameInMap
                var nameInMapAttribute = member.GetCustomAttribute(typeof(Tea.NameInMapAttribute)) as Tea.NameInMapAttribute;
                if (nameInMapAttribute != null)
                {
                    // Usar el valor del atributo NameInMap como nombre de campo JSON
                    property.PropertyName = nameInMapAttribute.Name;
                }
                
                return property;
            }
        }
        
        // Configuraciones de serialización JSON personalizadas
        private static readonly JsonSerializerSettings _jsonSettings = new JsonSerializerSettings
        {
            ContractResolver = new NameInMapContractResolver(),
            NullValueHandling = NullValueHandling.Ignore
        };
        
        private Client _client;
        private Config _config;

        [SetUp]
        public void Setup()
        {
            // Configurar el cliente para pruebas
            _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()
        {
            // Arrange
            var request = new WinUpgradeRequest
            {
                WinKey = "npJi367lttpwmD1goZ1yOQ",
                Arch = "x64",
                VersionCode = 1,
                AppointVersionCode = 0,
                DevModelKey = "",
                DevKey = ""
            };

            // Act
            try
            {
                Console.WriteLine("Enviando solicitud WinUpgrade...");
                // Imprimir información de la solicitud
                Console.WriteLine("Información de la Solicitud:");
                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}");
                
                // Serializar el cuerpo de la solicitud e imprimir (usando el mismo resolver de contratos personalizado que el cliente)
                string bodyStr = Newtonsoft.Json.JsonConvert.SerializeObject(request, _jsonSettings);
                Console.WriteLine($"Cuerpo de la Solicitud Serializado: {bodyStr}");
                Console.WriteLine("Nota: El cuerpo de la solicitud anterior coincide con el formato de serialización utilizado en la solicitud real");
                
                var response = _client.WinUpgrade(request);
                Console.WriteLine("¡Solicitud exitosa!");
                Console.WriteLine($"response.code: {response.Code}");
                Console.WriteLine($"response.msg: {response.Msg}");
                Console.WriteLine($"response.traceId: {response.TraceId}");
                
                // Imprimir datos de la respuesta (usando el mismo resolver de contratos personalizado que el cliente)
                if (response.Data != null)
                {
                    Console.WriteLine($"Datos: {Newtonsoft.Json.JsonConvert.SerializeObject(response.Data, _jsonSettings)}");
                }
            }
            catch (Tea.TeaException ex)
            {
                Console.WriteLine("Solicitud fallida - Detalles de TeaException:");
                Console.WriteLine($"Mensaje de Excepción: {ex.Message}");
                
                // Usar reflexión para obtener propiedades internas de TeaException
                var properties = ex.GetType().GetProperties();
                foreach (var property in properties)
                {
                    try
                    {
                        var value = property.GetValue(ex);
                        Console.WriteLine($"{property.Name}: {value}");
                    }
                    catch (Exception)
                    {
                        // Omitir propiedades que no se pueden acceder
                    }
                }
                
                // Imprimir la propiedad Data de la excepción
                if (ex.Data != null)
                {
                    Console.WriteLine("Datos de la Excepción:");
                    foreach (var key in ex.Data.Keys)
                    {
                        Console.WriteLine($"  {key}: {ex.Data[key]}");
                    }
                }
                
                Console.WriteLine($"Pila de Seguimiento: {ex.StackTrace}");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Solicitud fallida: {ex.Message}");
                Console.WriteLine($"Tipo de Excepción: {ex.GetType().Name}");
                Console.WriteLine($"Pila de Seguimiento: {ex.StackTrace}");
            }

            // Assert: La prueba siempre pasa porque solo nos interesa imprimir los resultados
            Assert.Pass("Se ha enviado la solicitud WinUpgrade, se han impreso los resultados");
        }
        
    }
}

toolsetlink@163.com