后端与接口
需要为 .NET 10 API 提供现代化交互式文档 UI…
适用于 .NET 10 应用设置 Scalar API 参考文档 UI,包括基本接入、主题与布局、认证预填、多文档、路由及生产安全,替代 Swagger UI。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
需要为 .NET 10 API 提供现代特定
解决思路
- 在 .NET 10 ASP.NET Core 项目中引入 `Scalar.AspNetCore`,用 Scalar 替代 Swagger UI 作为 API 文档 UI;它支持更快渲染、内置深色模式、多语言代码生成和完整 OpenAPI 3.1。
- 基本接入:调用 `builder.Services.AddOpenApi();`,在开发环境检查内调用 `app.MapOpenApi();` 和 `app.MapScalarApiReference();`,UI 默认位于 `/scalar/v1`。
- 默认仅在开发环境启用:把 `MapScalarApiReference()` 包在 `if (app.Environment.IsDevelopment())` 中,避免暴露 API 内部结构。
- 需要在生产环境提供文档时,给两个端点都加授权:`app.MapOpenApi().RequireAuthorization("ApiDocs");` 和 `app.MapScalarApiReference().RequireAuthorization("ApiDocs");`。
- 自定义 Scalar 配置:在 `MapScalarApiReference(options => { ... })` 中链式调用 `WithTitle(...)`、`WithTheme(...)`、`WithDefaultHttpClient(...)`、`WithPreferredScheme(...)`、`WithProxy(null)`、`WithSidebar(true)`。
- 开发环境预填认证凭据:OpenAPI 文档必须已通过 document transformer 包含 security scheme;然后在 `IsDevelopment()` 中调用 `WithPreferredScheme("Bearer")` 和 `AddHttpAuthentication("Bearer", auth => { auth.Token = "dev-only-test-token"; })`。
- 预填 API Key:使用 `WithApiKeyAuthentication(apiKey => { apiKey.Token = "dev-api-key"; })`。
- 预填 OAuth2:使用 `WithOAuth2Authentication(oauth => { oauth.ClientId = "your-client-id"; oauth.Scopes = ["openid", "profile"]; })`。
- 设置主题:使用 `options.WithTheme(ScalarTheme.Mars);`,可选主题为 `Default`、`Moon`、`Purple`、`BluePlanet`、`Saturn`、`Mars`、`DeepSpace`、`Kepler`、`Solarized`、`Laserwave`。
- 注册多个 OpenAPI 文档:调用 `builder.Services.AddOpenApi("v1");` 和 `builder.Services.AddOpenApi("v2-beta");`,Scalar 会自动拾取,访问 `/scalar/v1` 和 `/scalar/v2-beta`。
- 显式配置多文档:在 `MapScalarApiReference(options => { ... })` 中调用 `options.AddDocument("v1", "Production API")` 和 `options.AddDocument("v2-beta", "Beta API", isDefault: true)`。
- 自定义路由前缀:默认是 `/scalar/{documentName}`;调用 `app.MapScalarApiReference("/api-docs");` 后访问 `/api-docs/v1`。
- 强制深色模式:调用 `options.ForceDarkMode();`。
- 使用类 Swagger 经典布局:调用 `options.WithClassicLayout();`。
- 安全方案来自 OpenAPI 文档:通过 document transformer 配置 security schemes,而不是直接在 Scalar 中配置;例如先 `builder.Services.AddOpenApi(options => { options.AddDocumentTransformer<BearerSecuritySchemeTransformer>(); });` 再设置 `WithPreferredScheme("Bearer")`。
- 对敏感 API 禁用外部代理:识别到 `Try It` 请求默认经过 `proxy.scalar.com` 时,调用 `options.WithProxy(null)`,让认证头留在本地。
- 不要在生产环境无授权地暴露 Scalar:避免直接 `app.MapOpenApi(); app.MapScalarApiReference();`;应使用开发环境守卫或生产授权。
- 不要预填真实凭据:避免把真实生产 token 写进 `AddHttpAuthentication`;仅在开发环境使用测试 token。
- 不要遗漏 security scheme transformer:若 OpenAPI 文档没有 security schemes,`WithPreferredScheme("Bearer")` 不会生效;先注册 transformer 再设置 preferred scheme。
- 不要对敏感 API 保留默认代理:避免直接 `app.MapScalarApiReference();`,应使用 `options.WithProxy(null)`。
- 新 .NET 10 项目不要再用 Swagger UI:避免 `AddSwaggerGen()` 和 `UseSwaggerUI()`,改用内置 OpenAPI + `AddOpenApi()`、`MapOpenApi()`、`MapScalarApiReference()`。
- 按场景选择:API 文档 UI 用 `MapScalarApiReference()` 配合 `MapOpenApi()`;开发环境用默认 `IsDevelopment()` 守卫;生产文档给两个端点加 `.RequireAuthorization()`;开发认证测试用 `AddHttpAuthentication()` 和测试 token;偏好深色用 `.ForceDarkMode()` 或 `.WithTheme(ScalarTheme.Moon)`;多版本用多次 `AddOpenApi()`;敏感 API 用 `.WithProxy(null)`;类 Swagger 布局用 `.WithClassicLayout()`;自定义路由用 `app.MapScalarApiReference("/api-docs")`。
适用边界 · 注意事项
- 不适用于非 .NET / 非 ASP.NET Core 项目,或无法引入 `Scalar.AspNetCore` 与 OpenAPI 的环境。
- 生产环境若没有可用的授权策略,不应启用 Scalar 或 OpenAPI 文档端点。
- 敏感 API 若无法禁用 Scalar 外部代理,不应使用其 `Try It` 功能。