首页 > 其他分享 >.NET 9使用Scalar替代Swagger

.NET 9使用Scalar替代Swagger

时间:2024-11-13 19:43:31浏览次数:1  
标签:app Scalar Swashbuckle NET Swagger AspNetCore

.NET 9使用Scalar替代Swagger

 

背景

.NET 9刚刚正式发布了,如果你创建一个空的Asp.Net Core 9.0的Web API项目,启动之后,你会惊讶地发现陪伴你多年的Swagger没有了!——这是因为ASP.NET Core项目组已经将Swashbuckle.AspNetCore从.NET 9里移除了,详情看这里 [github]Announcement: Swashbuckle.AspNetCore is being removed in .NET 9

image

Swagger被移除的原因可以总结为以下几点:

  • Swashbuckle 维护不力:Swashbuckle 项目不再由社区所有者积极维护,存在许多问题未得到解决,并且未发布兼容 .NET 8 的正式版本。

  • 转向 Microsoft.AspNetCore.OpenApi:ASP.NET Core 团队将增强 Microsoft.AspNetCore.OpenApi 的功能,以取代 Swashbuckle 并实现 OpenAPI 文档生成。

  • 已有替代方案:除了 Swashbuckle,还有 NSwag 等其他项目支持 OpenAPI 文档生成和客户端/服务器代码生成,开发者可以根据项目需求选择合适的方案。

  • 增强内置 API 支持:从 ASP.NET Core 3.1 开始,框架已经提供了 ApiExplorer 等元数据支持,结合 Visual Studio 和 Visual Studio Code 对 .http 文件的内置支持,API 测试和调试体验更佳。

  • 推动 OpenAPI 成为核心组件:ASP.NET Core 团队计划在 .NET 9 中进一步提升 OpenAPI 的集成度,将其作为核心组件,专注于生成 JSON 格式的 OpenAPI 文档。

除了上面提到了NSwag,Scalar也是Swagger优秀的替代品。

Scalar

Scalar 是一个开源的 API 平台, 提供现代化的 REST API 客户端、精美的 API 文档和一流的OpenAPI/Swagger支持,官方几乎支持所有编程语言和平台。
image

Github地址:https://github.com/scalar/scalar

.NET 9集成Scalar

.NET也是Scalar支持的一等公民,集成非常简单,nuget安装Scalar.AspNetCore包

  dotnet add package Scalar.AspNetCore
   

然后只用增加一个代码即可app.MapScalarApiReference()

  using Scalar.AspNetCore;
   
  var builder = WebApplication.CreateBuilder(args);
   
  builder.Services.AddOpenApi();
   
  var app = builder.Build();
   
  if (app.Environment.IsDevelopment())
  {
  app.MapScalarApiReference(); // scalar/v1
  app.MapOpenApi();
  }
   
  app.MapGet("/", () => "Hello world!");
   
  app.Run();

最后启动项目,打卡scalar/v1这个地址就是Scalar界面。
image

界面非常清爽,使用也很简单,并且支持夜间模式

添加JWT认证

在Scalar添加JWT也很简单,自定义一个BearerSecuritySchemeTransformer类来实现IOpenApiDocumentTransformer接口即可。

  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")) {
  // Add the security scheme at the document level
  var requirements = new Dictionary < string,
  OpenApiSecurityScheme > {
  ["Bearer"] = new OpenApiSecurityScheme {
  Type = SecuritySchemeType.Http,
  Scheme = "bearer", // "bearer" refers to the header name here
  In = ParameterLocation.Header,
  BearerFormat = "Json Web Token"
  }
  };
  document.Components ??= new OpenApiComponents();
  document.Components.SecuritySchemes = requirements;
   
  // Apply it as a requirement for all operations
  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 > ()
  });
  }
  }
  }
  }
   

然后注册即可

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

最后

Scalar是一个优秀的Swagger替代品,某些功能甚至比Swagger更强大,推荐大家赶紧去试试。

标签:app,Scalar,Swashbuckle,NET,Swagger,AspNetCore
From: https://www.cnblogs.com/sexintercourse/p/18544647

相关文章

  • 【自动驾驶-感知】CenterNet与CenterFusion融合目标检测的目标检测模型实战代码-基于P
    【自动驾驶-感知】CenterNet与CenterFusion融合目标检测的目标检测模型实战代码一.CenterNet目标检测模型1.中心点热力图2.物体尺寸回归3.分类任务4.损失函数二、融合目标检测CenterFusion算法原理三.实现案例与代码数据集与实验环境数据预处理与增强模型定义......
  • libcurl.net入门使用
    libcurl.net入门使用关于libcurl.net一个引用libcurl.dll并封装为.NET使用的Curl库,方便在.NET应用程序里面执行Curl命令,没有其他库依赖,只是对libcurl.dll的封装和引用。在大多数情况下,我们可以或者比较容易获取Web请求的Curl格式的请求内容,因此该库可以比较方便地对已知Curl命......
  • 【阅读文献笔记】TransXNet: Learning Both Global and LocalDynamics with a Dual Dy
    从经典的ViTs说起,即基于MHSA构建远距离建模实现全局感受野的覆盖,但缺乏像CNNs般的归纳偏差能力。因此在泛化能力上相对较弱,需要大量的训练样本和数据增强策略来弥补。针对这个问题,SwinTransformer率先引入了移位窗口自注意力来引入归纳偏差并减少计算成本。然而,作者......
  • .net动态类ExpandoObject及使用场景
    它位于System.Dynamic命名空间中。与普通的C#类型不同,ExpandoObject允许在运行时动态地添加、删除或修改其成员(属性或方法)。这使得它在一些需要高度灵活性和动态性的数据结构场景中非常有用。ExpandoObject的基本特性动态成员访问:可以在运行时添加或移除属性和方法。弱类型......
  • kubernetes镜像拉取失败解决方法 ErrImagePull
    被这个问题卡住了最少一个下午的时间。。。。不过就当熟悉k8s的命令了吧。。。只能这么安慰自己了最近在捣鼓k8s部署.netcore的后端(我是在windows上部署dockerdesktop来做测试的),在拉取我阿里云镜像仓库的私有镜像,搞来搞去搞了好久都没用dockpull registry.cn-hangzhou.aliyu......
  • .NET 各版本贡献者列表
    在微信群里看到有同学对.NET9的贡献者数量有质疑,.NET这样的一个全场景的应用开发平台,他的生态是很庞大的,自然一起参与开源贡献的开发者也是很大的,但是很多人都不知道一直有这么一个地址是统计了.NET各个版本的开发者数量的,这篇文章就是给大家统计显示一下各个版本的.NET贡献者人......
  • 推荐一个.NetCore开源的CMS项目,功能强大、扩展性强、支持插件的系统!
    推荐一个基于.NetCore开发的开源CMS项目,该项目功能完善、涉及知识点比较多,不管是作为二次开发、还是学习都是不错的选择。01项目简介Cofoundry是基于.Net开发的、代码优先开发、具备可扩展且灵活的架构、简单易用的内容管理系统。02项目框架1、基于.Net8开发。2、数据......
  • 华为路由器/交换机配置Console口AAA认证以及Telnet登录
    一、Console口登录 Console口是路由器/交换机的本地管理接口,通常用于设备初始配置和管理。本文将介绍console登录的两种配置方式1、密码模式配置成这种模式后Console登录只需要输入密码。配置方法一[Huawei]user-interfaceconsole0 [Huawei-ui-console0]authentica......
  • 【轻量化】YOLOv8 更换骨干网络之 MobileNetv4 | 模块化加法!非 timm 包!
    之前咱们在这个文章中讲了timm包的加法,不少同学反馈要模块化的加法,那么这篇就讲解下模块化的加法,值得注意的是,这样改加载不了mobilebnetv4官方开源的权重了~论文地址:https://arxiv.org/pdf/2404.10518代码地址:https://github.com/tensorflow/models/blob/master/offic......
  • 微信小程序 - 解决报错{“errno“:600001,“errMsg“:“request:fail errcode:-202cronet_
    前言关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。在微信小程序开发中,详细解决小程序请求接口报错:{“errno”:600001,“errMsg”:“request:failerrcode:-202cronet_error_code:-202error_msg:net::ERR_CERT_AUTHORITY_INVALID”},微信小程序发起网络请求......