C# SDK 快速入门
本文为您提供使用 C# SDK 进行常见操作的快速入门。 您将学习如何安装SDK、配置访问凭证,以及执行基本操作,获取最新升级信息等。
注意事项
- 使用 C# SDK发起请求,您需要初始化一个Client实例。本文通过加载默认配置来创建一个Client。关于客户端的更多配置选项,请参见配置客户端。
前提条件
- 已注册upgradeLink账号。
- 获取到 AccessKey AccessSecret。
- 配置了Windows应用升级策略。
获取凭证

安装方法
通过 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
- 下载好源码后,按照
项目引入方式安装即可
项目引入方式安装
- 如果是下载了SDK包或者从GitHub上下载了源码,希望源码安装,可以右键
<解决方案>,在弹出的菜单中点击<添加>-><现有项目>。- 在弹出的对话框中选择
upgradeLinkApiCSharp.csproj文件,点击打开。- 接下来右键
<您的项目>-<引用>,选择<添加引用>,在弹出的对话框选择<项目>选项卡后选中upgradeLinkApiCSharp项目,点击确定即可。
快速使用
以下示例程序演示了如何Clint初始化,获取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()
{
// Arrange
var request = new WinUpgradeRequest
{
WinKey = "npJi367lttpwmD1goZ1yOQ",
Arch = "x64",
VersionCode = 1,
AppointVersionCode = 0,
DevModelKey = "",
DevKey = ""
};
// Act
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("Exception Data:");
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请求已发送,结果已打印");
}
}
}