👨‍💻 niltor    📆 2026-08-27 17:44

模板配置参考

本文按当前 ApiStandard 模板源码整理配置项。配置文件使用 ASP.NET Core 的标准配置系统:JSON、环境变量、用户密钥和命令行参数可以叠加,后加载的配置会覆盖前面的值。

MiniApi 复用缓存、认证、登录安全策略、SMTP、SMS 和 S3 等 Options;其 ComponentOption 不包含 Database 和 IsMultiTenant,数据库固定为 PostgreSQL,也不提供内置的 EF Core 迁移资源。下文涉及数据库选择和多租户的内容仅适用于 ApiStandard。

配置来源

模板运行时有两类配置:

  • src/AppHost/appsettings*.json:由 AppHost 读取,用于选择数据库、缓存并传递租户配置,在 Aspire 启动时统一注入服务。
  • src/Services/ApiService 和 src/Services/AdminService 的 appsettings*.json:服务自身配置,用于认证、CORS、缓存策略和可选工具组件。

使用 Aspire 启动时,AppHost 会把基础设施选择统一传给服务:

JSON 配置 服务环境变量 作用
Components:Cache Components__Cache 选择 Memory、Redis 或 Hybrid
Components:Database Components__Database 选择 PostgreSQL 或 SqlServer
Components:IsMultiTenant Components__IsMultiTenant 默认值为true并传递给服务;ApiStandard始终使用Tenant目录、TenantId字段、全局过滤器和保存校验,该值不会关闭这些规则。
Aspire 数据库资源 ConnectionStrings__Default 默认数据库连接
Aspire Redis 资源 ConnectionStrings__Cache 缓存连接

环境变量中的 __ 对应配置路径中的 :。例如:

$env:Components__IsMultiTenant = "true"
$env:Authentication__Jwt__Sign = "replace-with-a-secret"

直接运行某个服务时,不会经过 AppHost 注入;此时应在服务的配置文件、环境变量或密钥服务中提供相同配置。

Components

Components 绑定到 ComponentOption,常用配置如下:

配置项 可选值/类型 说明
Cache Memory、Redis、Hybrid Redis 和 Hybrid 需要 Redis;AppHost 只在这两种模式下创建 Redis 资源。
Database PostgreSQL、SqlServer 选择 EF Core 数据库提供程序。枚举名称为 PostgreSql,配置文件中推荐使用 PostgreSQL。
AuthType Jwt、Cookie、OAuth 选择认证模式;默认值为 Jwt。
MQType None、Nats、RabbitMQ、KafKa 选择消息队列类型。当前模板枚举值使用 KafKa 拼写;具体消息队列注册由模块或业务代码完成。
UseCors 布尔值 保留的 CORS 配置项。当前 WebExtensions 总是注册并使用 CORS,中间件策略由 Cors 配置和运行环境决定;该值目前不是跳过 CORS 的开关。
IsMultiTenant 布尔值,默认true 传递给服务的租户配置。ApiStandard始终使用租户感知的数据模型;单租户也会初始化default.com并为业务实体绑定TenantId。认证请求需要有效TenantId,空或未知租户不会回退;是否使用租户独立数据库连接由Tenant记录和AppDbFactory决定。
UseSMS 布尔值 为 true 时注册 SMS 配置和短信服务。
UseSmtp 布尔值 为 true 时注册 Smtp 配置和邮件服务。
UseAWSS3 布尔值 为 true 时注册 AWSS3 配置和对象存储服务。

当前 ComponentOption 没有 Components:UseOpenAPI 属性,模板代码也不会读取它;不要使用它控制 OpenAPI。ApiStandard 是否映射 Swagger 由当前服务默认配置决定,MiniApi 使用 ASP.NET Core OpenAPI。

Cache

Cache 绑定到 CacheOption,时间单位为分钟:

配置项 默认值 说明
MaxPayloadBytes 1048576 缓存内容允许的最大字节数。
MaxKeyLength 1024 缓存键最大长度。
Expiration 20 分布式缓存默认过期时间。
LocalCacheExpiration 10 本地缓存默认过期时间。

Authentication

Jwt

路径为 Authentication:Jwt,生产环境至少应通过环境变量或密钥服务提供 Sign:

配置项 默认值 说明
ValidAudiences 必填 JWT 的受众。
ValidIssuer 必填 JWT 的发行者。
Sign 必填 签名密钥,不要提交真实密钥到仓库。
ExpiredSecond 7200 访问令牌有效期,单位为秒。
RefreshExpiredSecond 604800 刷新令牌有效期,单位为秒。

OAuth

路径为 Authentication:OAuth:

配置项 默认值 说明
Authority 空 OAuth/OIDC authority 地址。
Audiences 空数组 允许的 audience 列表。
RequireHttpsMetadata true 是否要求 HTTPS 元数据;仅 Development 可按需关闭。
ValidateAudience true 预留的 audience 校验选项;当前内置 OAuth 配置固定启用 audience 校验。
Sign 空 扩展场景使用的签名配置。

示例中的 Authentication:OAuth:ClientId 不属于当前 OAuthOption 的绑定属性;第三方登录的 Microsoft/Google 客户端配置见下文。

LoginSecurityPolicy

路径为 LoginSecurityPolicy:

配置项 默认值 说明
PasswordLevel Normal(数值 1) Simple(6 位)、Normal(8 位且包含大小写和数字)、Strict(8 位且包含大小写、数字和特殊字符)。
IsNeedVerifyCode false 是否要求验证码。
PasswordExpired 365 密码过期时间,单位为月。
LoginRetry 5 登录失败重试次数。
SessionLevel None(数值 0) None、OnlyClient 或 OnlyOne。
SessionExpiredSeconds 1800 会话有效期,单位为秒。
IsEnable false 是否启用登录安全策略。

可选工具组件

只有对应的 Components:Use* 为 true 时,模板才会注册这些 Options:

配置节点 关键配置 说明
Smtp Host、Port、DisplayName、From、Username、Password、EnableSsl SMTP 邮件服务。默认端口为 25。
SMS AccessKeyId、AccessKeySecret、Sign 短信服务凭据和签名。
AWSS3 Endpoint、AccessKeyId、AccessKeySecret、BucketName、Region、Prefix S3 兼容对象存储。

其他配置节点

下列配置不属于上述自定义 Options,但会被模板直接读取:

  • Cors:AllowedOrigins:生产环境允许的来源列表。
  • Cors:AllowedSubdomains:是否允许来源的通配子域名。
  • Authentication:Microsoft 和 Authentication:Google:当 ClientId、ClientSecret、CallbackUrl 均有效时注册第三方登录。
  • ConnectionStrings:Default、ConnectionStrings:Analysis 和 ConnectionStrings:Cache:分别用于默认业务数据库、可选分析数据库和缓存。未配置Analysis时使用Default;使用现有数据库或缓存时,可在 AppHost 中通过 AddConnectionString 统一提供。
  • OTEL_EXPORTER_OTLP_ENDPOINT:Aspire 注入的 OpenTelemetry 导出地址。

迁移相关环境变量

迁移生成脚本和 AppHost 使用以下变量保持模型一致:

  • Components__Database:决定生成 SQL 的数据库提供程序。
  • Components__IsMultiTenant:由AppHost和迁移脚本传递给服务;它不决定是否生成租户索引,TenantIndexConvention会统一处理实现ITenantEntityBase的实体。

EF Core 迁移、初始化数据和生产发布流程请参阅数据库迁移与初始化和发布应用。