模板配置参考
本文按当前 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的实体。
In this article