2.34.0

(feat): 添加 unified-client-options 配置标志。启用时,所有认证参数、 全局头部和 BaseUrl 都合并到 ClientOptions 中,使客户端 构造函数采用单一参数,无需位置参数:

1# generators.yml
2groups:
3 dotnet-sdk:
4 generators:
5 - name: fernapi/fern-csharp-sdk
6 config:
7 unified-client-options: true

之前 (默认):

1var client = new MyClient(
2 "my-api-key",
3 clientOptions: new ClientOptions { BaseUrl = "..." }
4);

之后 (启用 unified-client-options: true):

1var client = new MyClient(
2 new ClientOptions
3 {
4 ApiKey = "my-api-key",
5 BaseUrl = "https://api.example.com",
6 }
7);

支持的认证方案:bearer token、基本认证 (用户名/密码)、header 认证、 OAuth 客户端凭据 (clientId/clientSecret + 自定义参数) 和推断认证。 全局头部 (非字面量) 也包括在内。

ClientOptions 的属性根据参数的特性使用适当的 C# 语义:

  • 有环境变量回退public string? ApiKey { get; set; }。 可空且可变,以便构造函数可以通过 clientOptions.ApiKey ??= GetFromEnvironmentOrThrow(...) 应用回退。
  • 可选 (无环境变量)public string? ApiKey { get; init; }。 可空,构造后不可变。
  • 必需 (无环境变量,非可选)public required string ApiKey { get; init; }。 不可空,编译器在调用处强制执行。当没有配置默认环境时,BaseUrl 也是 required,替代之前静默默认为 "" 的行为。

当任何 ClientOptions 字段是 required 时,构造函数参数变为 不可空 (ClientOptions clientOptions 而不是 ClientOptions? clientOptions = null), 并且 Clone() 使用带有 [SetsRequiredMembers] 注解的内部复制构造函数。

2.33.1

(fix): 修复 README 生成,使用 generator.yml 中的 package-name 字段作为 安装说明和徽章中的 NuGet 包名称。之前,README 始终使用命名空间 (或 package-id 自定义配置) 而不是配置的 package-name,而后者是实际的 NuGet 包标识符。

2.33.0

(feat): WebSocket 工厂方法现在当通道指定 baseUrl 时,从主客户端的 多 URL 环境解析基础 URL。这允许 WebSocket 客户端使用在根客户端定义的环境 (例如, Environment.Wss) 而不需要单独的每个 WebSocket 环境 类。

2.32.2

(fix): 修复在 netstandard2.0net462 目标上字面量结构 GetHashCode 的 CS1501 构建错误。string.GetHashCode(StringComparison) 仅在 .NET Core 2.1+ / .NET Standard 2.1+ 中可用。生成的代码现在使用 StringComparer.Ordinal.GetHashCode(Value),它在所有框架上都可用。

2.32.1

(fix): 修复具有 application/x-www-form-urlencoded 内容类型的引用请求体 生成 FormRequest 而不是 JsonRequest。之前,使用带有表单 URL 编码内容类型的 $ref 模式的端点会错误地发送 JSON 序列化的 请求体,导致认证令牌请求 (例如 OAuth) 失败。