mcpField
S
scalar

scalar

github.com/codewithmukesh开发7913.0k 次安装12 周前更新
代码仓库

关于 scalar

面向 .NET 的技能,介绍如何通过 Scalar 展示 OpenAPI 文档,并配置 API 文档界面。内容包括主题、身份验证、多文档、路由和访问控制。

主要功能

  1. 01Scalar API 文档界面
  2. 02主题与布局配置
  3. 03身份验证设置
  4. 04多个 API 文档
  5. 05路由与访问控制

适用场景

  1. 01在开发期间查看 API 文档
  2. 02测试 API 身份验证
  3. 03限制生产环境文档的访问

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/codewithmukesh/dotnet-claude-kit --skill scalar

安装后在 Claude Code 中输入/scalar确认已加载。

详细介绍

Scalar

核心原则

  1. Scalar 替代 Swagger UI — Scalar 是 .NET 10 推荐的 API 文档 UI。渲染速度更快,内置深色模式,支持数十种语言的代码生成,并全面支持 OpenAPI 3.1。
  2. 默认仅在开发环境中使用 — 将 MapScalarApiReference() 包装在 IsDevelopment() 检查中。API 文档会暴露内部结构。如果需要在生产环境中使用,请添加授权。
  3. 对敏感 API 禁用代理 — Scalar 的“Try It”功能默认通过 proxy.scalar.com 路由。使用 .WithProxy(null) 禁用代理,以便将授权标头保留在本地。
  4. 安全方案来自 OpenAPI — Scalar 从 OpenAPI 文档中读取安全方案。请通过文档转换器进行配置,不要直接在 Scalar 中配置。

模式

基本设置
using Scalar.AspNetCore;

var builder = WebApplication.CreateBuilder(args);
builder.Services.AddOpenApi();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
    app.MapScalarApiReference();  // UI at /scalar/v1
}

app.Run();
自定义配置
app.MapScalarApiReference(options =>
{
    options
        .WithTitle("Checkout API")
        .WithTheme(ScalarTheme.Mars)
        .WithDefaultHttpClient(ScalarTarget.CSharp, ScalarClient.HttpClient)
        .WithPreferredScheme("Bearer")
        .WithProxy(null)  // Disable external proxy
        .WithSidebar(true);
});
预填身份验证信息(仅限开发环境)

预填凭据,开发者就不必手动粘贴令牌。OpenAPI 文档必须已通过文档转换器包含安全方案。

if (app.Environment.IsDevelopment())
{
    app.MapScalarApiReference(options =>
    {
        options
            .WithPreferredScheme("Bearer")
            .AddHttpAuthentication("Bearer", auth =>
            {
                auth.Token = "dev-only-test-token";
            });
    });
}

其他身份验证类型:

// API Key
options.WithApiKeyAuthentication(apiKey =>
{
    apiKey.Token = "dev-api-key";
});

// OAuth2
options.WithOAuth2Authentication(oauth =>
{
    oauth.ClientId = "your-client-id";
    oauth.Scopes = ["openid", "profile"];
});
可用主题
// ScalarTheme options: Default, Moon, Purple, BluePlanet, Saturn, Mars, DeepSpace, Kepler, Solarized, Laserwave
options.WithTheme(ScalarTheme.Mars);
多个 API 文档
// Register multiple OpenAPI documents
builder.Services.AddOpenApi("v1");
builder.Services.AddOpenApi("v2-beta");

// Scalar picks them up automatically
app.MapOpenApi();
app.MapScalarApiReference();
// Available at /scalar/v1 and /scalar/v2-beta

或者显式配置文档:

app.MapScalarApiReference(options =>
{
    options
        .AddDocument("v1", "Production API")
        .AddDocument("v2-beta", "Beta API", isDefault: true);
});
自定义路由前缀
// Default is /scalar/{documentName}
app.MapScalarApiReference("/api-docs");
// Now at /api-docs/v1
配置带授权的生产环境
// When partners need access to docs in production
app.MapOpenApi().RequireAuthorization("ApiDocs");
app.MapScalarApiReference().RequireAuthorization("ApiDocs");
强制使用深色模式
options.ForceDarkMode();
经典布局(类似 Swagger)
options.WithClassicLayout();

反模式

不要在生产环境中无授权地公开 Scalar
// BAD — anyone can see your API structure
app.MapOpenApi();
app.MapScalarApiReference();

// GOOD — development only
if (app.Environment.IsDevelopment())
{
    app.MapOpenApi();
    app.MapScalarApiReference();
}

// GOOD — production with auth
app.MapOpenApi().RequireAuthorization("ApiDocs");
app.MapScalarApiReference().RequireAuthorization("ApiDocs");
不要预填真实凭据
// BAD — real tokens visible in browser
options.AddHttpAuthentication("Bearer", auth =>
{
    auth.Token = "eyJhbG...real-production-token";
});

// GOOD — dev-only test tokens
if (app.Environment.IsDevelopment())
{
    options.AddHttpAuthentication("Bearer", auth =>
    {
        auth.Token = "dev-only-test-token";
    });
}
不要忘记安全方案转换器
// BAD — no auth UI in Scalar because OpenAPI doc has no security schemes
builder.Services.AddOpenApi();
app.MapScalarApiReference(options =>
{
    options.WithPreferredScheme("Bearer"); // Does nothing!
});

// GOOD — register the document transformer first
builder.Services.AddOpenApi(options =>
{
    options.AddDocumentTransformer<BearerSecuritySchemeTransformer>();
});
app.MapScalarApiReference(options =>
{
    options.WithPreferredScheme("Bearer");
});
不要为敏感 API 保持代理启用
// BAD — auth headers flow through proxy.scalar.com
app.MapScalarApiReference();

// GOOD — disable proxy for APIs with sensitive data
app.MapScalarApiReference(options =>
{
    options.WithProxy(null);
});
新建 .NET 10 项目时不要使用 Swagger UI
// BAD — Swashbuckle removed from templates, maintenance concerns
builder.Services.AddSwaggerGen();
app.UseSwaggerUI();

// GOOD — built-in OpenAPI + Scalar
builder.Services.AddOpenApi();
app.MapOpenApi();
app.MapScalarApiReference();

决策指南

场景建议
API 文档 UI使用 MapScalarApiReference() 和 MapOpenApi()
开发环境使用带 IsDevelopment() 防护的默认设置
生产环境 API 文档为两个端点都添加 .RequireAuthorization()
在开发环境中测试身份验证使用 AddHttpAuthentication() 配合测试令牌
偏好深色主题使用 .ForceDarkMode() 或 .WithTheme(ScalarTheme.Moon)
多个 API 版本多次调用 AddOpenApi() — Scalar 会自动检测
敏感 API使用 .WithProxy(null) 禁用外部代理
类似 Swagger 的布局使用 .WithClassicLayout()
自定义路由使用 app.MapScalarApiReference("/api-docs")

评论

支持 Markdown