.NET 9 微软官方推荐使用 Scalar 替代传统的 Swagger

news/2025/2/9 4:41:57 标签: microsoft, .net, javascript

在 .NET 9 中,微软官方推荐使用 Scalar 替代传统的 Swagger(Swashbuckle)作为 API 文档和交互工具。Scalar 是一个现代化的 API 平台,支持 OpenAPI/Swagger 规范,提供精美的文档界面和强大的功能。

一、如何在 .NET 9 中集成 Scalar

  1. 安装 Scalar.AspNetCore 包 在项目中安装 Scalar.AspNetCore NuGet 包。可以通过以下命令完成:

    bash复制

    dotnet add package Scalar.AspNetCore --version 1.2.*

    建议使用版本号中的通配符(如 1.2.*),以便获取最新的功能和修复。

  2. 配置项目Program.cs 文件中,配置 Scalar 和 OpenAPI 服务:

    csharp复制

    using Scalar.AspNetCore;
    
    var builder = WebApplication.CreateBuilder(args);
    builder.Services.AddOpenApi(); // 添加 OpenAPI 服务
    
    var app = builder.Build();
    
    if (app.Environment.IsDevelopment())
    {
        app.MapOpenApi(); // 映射 OpenAPI 文档
        app.MapScalarApiReference(); // 映射 Scalar API 参考界面
    }
    
    app.Run();

    启动项目后,访问 /scalar/v1 即可查看 Scalar 提供的交互式 API 文档。

  3. 自定义 Scalar 界面 Scalar 提供了丰富的自定义选项,例如修改主题、标题和侧边栏显示等:

    csharp复制

    app.MapScalarApiReference(options =>
    {
        options.WithTitle("My Custom API"); // 设置标题
        options.WithTheme(ScalarTheme.BluePlanet); // 设置主题
        options.WithSidebar(false); // 隐藏侧边栏
    });

    这些配置可以让 Scalar 的界面更好地适应你的项目需求。

  4. 添加认证支持 如果你的 API 需要认证,可以通过实现 IOpenApiDocumentTransformer 接口来添加 JWT 或其他认证方式。例如,添加 JWT 认证的代码如下:

    csharp复制

    public sealed class BearerSecuritySchemeTransformer(IAuthenticationSchemeProvider authenticationSchemeProvider) : IOpenApiDocumentTransformer
    {
        public async Task TransformAsync(OpenApiDocument document, OpenApiDocumentTransformerContext context, CancellationToken cancellationToken)
        {
            var authenticationSchemes = await authenticationSchemeProvider.GetAllSchemesAsync();
            if (authenticationSchemes.Any(authScheme => authScheme.Name == "Bearer"))
            {
                var requirements = new Dictionary<string, OpenApiSecurityScheme>
                {
                    ["Bearer"] = new OpenApiSecurityScheme
                    {
                        Type = SecuritySchemeType.Http,
                        Scheme = "bearer",
                        In = ParameterLocation.Header,
                        BearerFormat = "Json Web Token"
                    }
                };
    
                document.Components ??= new OpenApiComponents();
                document.Components.SecuritySchemes = requirements;
    
                foreach (var operation in document.Paths.Values.SelectMany(path => path.Operations))
                {
                    operation.Value.Security.Add(new OpenApiSecurityRequirement
                    {
                        [new OpenApiSecurityScheme
                        {
                            Reference = new OpenApiReference { Id = "Bearer", Type = ReferenceType.SecurityScheme }
                        }] = Array.Empty<string>()
                    });
                }
            }
        }
    }

    然后在 Program.cs 中注册:

    csharp复制

    builder.Services.AddOpenApi(opt =>
    {
        opt.UseTransformer<BearerSecuritySchemeTransformer>();
    });

二、Scalar 的优势

  • 现代化界面:Scalar 提供了更现代、更美观的界面,支持夜间模式。

  • 功能强大:支持多种编程语言的客户端代码生成,并允许在请求中添加 Cookie、头信息和查询参数。

  • 安全性:支持多种认证方式,包括 API Key、OAuth2、HTTP Basic 和 Bearer。

总结

Scalar 是一个优秀的 Swagger 替代品,提供了更强大的功能和更好的用户体验。微软官方也推荐在 .NET 9 中使用 Scalar。你可以尝试将其集成到项目中,以提升开发效率和文档质量


http://www.niftyadmin.cn/n/5833368.html

相关文章

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天,越来越多的开发者和研究者希望能够亲自体验和微调大模型,以便更好地理解和应用这些先进的技术。然而,高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是,腾讯云Cloud Studio提供了免费的GPU算力资源,结合深度求索(DeepSeek…

AI如何帮助解决生活中的琐碎难题?

引言&#xff1a;AI已经融入我们的日常生活 你有没有遇到过这样的情况——早上匆忙出门却忘了带钥匙&#xff0c;到了公司才想起昨天的会议资料没有打印&#xff0c;或者下班回家还在纠结晚饭吃什么&#xff1f;这些看似微不足道的小事&#xff0c;往往让人疲惫不堪。而如今&a…

webrtc入门系列(五)amazon-kinesis-video-streams-webrtc-sdk-c编译

《webrtc入门系列&#xff08;一&#xff09;easy_webrtc_server 入门环境搭建》 《webrtc入门系列&#xff08;二&#xff09;easy_webrtc_server 入门example测试》 《webrtc入门系列&#xff08;三&#xff09;云服务器coturn环境搭建》 《webrtc入门系列&#xff08;四&…

批量创建ES索引

7.x from elasticsearch import Elasticsearch# 配置 Elasticsearch 连接 # 替换为你的 Elasticsearch 地址、端口、用户名和密码 es Elasticsearch([http://10.10.x.x:43885],basic_auth(admin, XN272G9THEAPYD5N5QORX3PB1TSQELLB) )# # 测试连接 # try: # # 尝试获取集…

Spring Boot Actuator 集成 Micrometer(官网文档解读)

目录 概述 实现 Observation 可观测性 Observation 功能核心类 ObservationPredicate GlobalObservationConvention ObservationFilter ObservationHandler ObservationRegistryCustomizer Observation 相关注解 多线程处理机制 配置上下文传播 常用标签配置 Open…

this 关键字与箭头函数:深入理解 JavaScript 中的上下文

Hi&#xff0c;我是布兰妮甜 &#xff01;JavaScript 的 this 关键字和箭头函数是语言中两个非常重要的概念&#xff0c;它们对于正确编写代码至关重要。尽管这两个特性在很多情况下简化了开发过程&#xff0c;但它们的行为有时可能显得复杂且难以预测。本文将深入探讨 this 的…

centos下设置服务器开机自启动 redis

在客户服务器中&#xff0c;服务器重启&#xff0c;发现 Redis 没有重启&#xff0c; 可以按照类似的步骤来创建自启动脚本&#xff0c;并将它添加到定时任务中。 解决办法&#xff1a; 1. 创建自启动脚本 进入服务器并创建脚本文件&#xff0c;例如 /usr/local/bin/redis_…

【Rust自学】15.1. 使用Box<T>智能指针来指向堆内存上的数据

喜欢的话别忘了点赞、收藏加关注哦&#xff08;加关注即可阅读全文&#xff09;&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.1.1. Box<T> box<T>可以被简单地理解为装箱&#xff0c;它是最简单的智能指…