Swashbuckle.AspNetCore3.0的二次封装与使用

关于 Swashbuckle.AspNetCore3.0

一个使用 ASP.NET Core 构建的 API 的 Swagger 工具。直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探索和测试操作的 UI。
项目主页:https://github.com/domaindrivendev/Swashbuckle.AspNetCore
项目官方示例:https://github.com/domaindrivendev/Swashbuckle.AspNetCore/tree/master/test/WebSites

之前写过一篇Swashbuckle.AspNetCore-v1.10 的使用,现在 Swashbuckle.AspNetCore 已经升级到 3.0 了,正好开新坑(博客重构)重新封装了下,将所有相关的一些东西抽取到单独的类库中,尽可能的避免和项目耦合,使其能够在其他项目也能够快速使用。

运行示例

640?wx_fmt=png

封装代码

待博客重构完成再将完整代码开源,参考下面步骤可自行封装
640?wx_fmt=png

1. 新建类库并添加引用

我引用的版本如下

    <PackageReference Include="Microsoft.AspNetCore.Http.Abstractions" Version="2.1.1" /><PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.1.1" /><PackageReference Include="Swashbuckle.AspNetCore" Version="3.0.0" />

2. 构建参数模型 CustsomSwaggerOptions.cs

640?wx_fmt=png

3. 版本控制默认参数接口实现 SwaggerDefaultValueFilter.cs

640?wx_fmt=png

4. CustomSwaggerServiceCollectionExtensions.cs

640?wx_fmt=png

5. SwaggerBuilderExtensions.cs

640?wx_fmt=png

6. 模型初始化

640?wx_fmt=png

7. 在 api 项目中使用

添加对新建类库的引用,并在 webapi 项目中启用版本管理需要为输出项目添加 Nuget 包:Microsoft.AspNetCore.Mvc.VersioningMicrosoft.AspNetCore.Mvc.Versioning.ApiExplorer (如果需要版本管理则添加)

我引用的版本如下

    <PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning" Version="2.3.0" /><PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="2.2.0" />

Startup.cs 代码

640?wx_fmt=png

关键代码拆解

action 方法的 xml 注释

640?wx_fmt=png

当然还需要生成xml,编辑解决方案添加(或者在vs中项目属性->生成->勾选生成xml文档文件)如下配置片段

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"><DocumentationFile>.\项目名称.xml</DocumentationFile></PropertyGroup><PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"><DocumentationFile>.\项目名称.xml</DocumentationFile></PropertyGroup>

目前.net core2.1我这会将此 xml 生成到项目目录,故可能需要将其加入.gitignore中。

版本控制

添加 Nuget 包:Microsoft.AspNetCore.Mvc.VersioningMicrosoft.AspNetCore.Mvc.Versioning.ApiExplorer
并在 ConfigureServices 中设置

640?wx_fmt=png

自定义主题

将 index.html 修改为内嵌资源就可以使用GetManifestResourceStream获取文件流,使用此 html,可以自己使用var configObject = JSON.parse('%(ConfigObject)');获取到 swagger 的配置信息,从而根据此信息去写自己的主题即可。

    /// <summary>/// 使用自定义首页/// </summary>/// <returns></returns>public static void UseCustomSwaggerIndex(this SwaggerUIOptions c)    {        var currentAssembly = typeof(CustsomSwaggerOptions).GetTypeInfo().Assembly;c.IndexStream = () => currentAssembly.GetManifestResourceStream($"{currentAssembly.GetName().Name}.index.html");}

若想注入 css,js 则在 UseSwaggerUIAction 委托中调用对应的方法接口,官方文档

另外,目前 swagger-ui 3.19.0 并不支持多语言,不过可以根据需要使用 js 去修改一些东西
比如在 index.html 的 onload 事件中这样去修改头部信息

document.getElementsByTagName(  'span')[0].innerText = document.getElementsByTagName('span')[0].innerText.replace('swagger', '项目接口文档')
document.getElementsByTagName(  'span')[1].innerText = document.getElementsByTagName('span')[1].innerText.replace('Select a spec', '版本选择')

在找汉化解决方案时追踪到 Swashbuckle.AspNetCore3.0 主题时使用的swagger-ui 为 3.19.0,从issues2488了解到目前不支持多语言,其他的问题也可以查看此仓库
在使用过程中遇到的问题,基本上 readme 和 issues 都有答案,遇到问题多多阅读即可

参考文章

  • 官方示例

  • Asp.Net Core 中使用 Swagger,你不得不踩的坑

原文地址: https://www.cnblogs.com/morang/p/9740190.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET微服务调查结果

.NET Core就是专门针对模块化的微服务架构而设计, 在2018年国庆时间展开.NET微服务的使用情况&#xff0c;本次调查我们总计收到了来自378个开发者的调查。从落地现状、架构体系、未来趋势等方面对微服务进行了分析。希望能够为传统企业微服务决策、规划和实施提供依据和解决办…

(牛客网)树型dp

树型dp 视频链接 &#xff08;如果想购买网课&#xff0c;可以用我的邀请码&#xff09; 用我的链接购买&#xff0c;我再反你10&#xff0c;一共花54多值 购买链接 不放心可以先加我好友2830872914 总试题链接 文章目录树型dp例题NC15033 小G有一个大树NC511788 没有上司的舞…

Node 源项目定制化、打包并使用全过程讲解

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是全栈工…

.Net Core中的Api版本控制

原文链接&#xff1a;API Versioning in .Net Core作者&#xff1a;Neel Bhatt简介Api的版本控制是Api开发中经常遇到的问题, 在大部分中大型项目都需要使用到Api的版本控制在本篇博客中&#xff0c;我们将说明一下如何在.Net Core Api项目中使用Api版本控制。本篇博客中测试项…

Visual Studio 2017 与 Visual Studio for Mac 支持更新

微软在博客中简单介绍了关于 VS 2017 和 VS for Mac 项目的支持计划&#xff1a;https://blogs.msdn.microsoft.com/visualstudio/2018/10/05/visual-studio-2017-and-visual-studio-for-mac-support-updates/。微软表示&#xff0c;在目前努力开发 Visual Studio 2019 的同时&…

ASP.NET Core中使用表达式树创建URL

当我们在ASP.NET Core中生成一个action的url会这样写&#xff1a;var url_urlHelper.Action("Index", "Home");这样的写法存在的问题在于我们传递了两个字符串类型的参数&#xff0c;而我们又无法避免对action和controller做重命名操作, 例如将index重命名…

在你的andorid设备上运行netcore (Linux Deploy)

最近注意到.net core 的新版本已经开始支持ARM 平台的CPU, 特意去Linux Deploy 中尝试了一下&#xff0c;真的可以运行 Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.9.65-perf armv8l)* Documentation: https://help.ubuntu.com/Ubuntu 16.04 LTS [running via Linux Deploy]La…

持续集成配置之Nuget

Intro本文是基于微软的 VSTS(Visual Studio Team Service) 做实现公众类库的自动打包及发布。之前自己的项目有通过 Github 上的 Travis 和 Appveyor&#xff0c;这次主要是用 VSTS 来做的&#xff0c;对比 appveyor 和 vsts 上的持续集成&#xff0c;vsts 上微软把常用的工具和…

【每日一题】8月7日题目精讲—双栈排序

来源&#xff1a;牛客网 文章目录题目描述题意&#xff1a;题解&#xff1a;代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 131072K&#xff0c;其他语言262144K 64bit IO Format: %lld题目描述 Tom最近在研究一个有趣的排序问…

手把手教你搭APM之Skywalking搭建指南(支持Java/C#/Node.js)

前言什么是APM?全称:Application Performance Management可以参考这里:现代APM体系&#xff0c;基本都是参考Google的Dapper&#xff08;大规模分布式系统的跟踪系统&#xff09;的体系来做的。通过跟踪请求的处理过程&#xff0c;来对应用系统在前后端处理、服务端调用的性能…

牛客练习赛 64——错排

A.怪盗-1412 111…1⏟⌊n2⌋444…4⏟m111…1⏟⌈n2⌉222…2⏟k\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lfloor \frac{n}{2} \rfloor \end {matrix}\begin{matrix} \underbrace{ 444\dots\ 4} \\ m \end{matrix}\begin{matrix} \underbrace{ 111\dots\ 1} \\ \lceil \fra…

牛客网状压dp

状压dp 视频链接 &#xff08;如果想购买网课&#xff0c;可以用我的邀请码&#xff09; 用我的链接购买&#xff0c;我再反你10&#xff0c;一共花54多值 购买链接 不放心可以先加我好友2830872914 总试题链接 文章目录状压dp预备知识——位运算例题&#xff1a;引入&#x…

【线段树】海报(loj 3264)

正题 loj 3264 题目大意 有一个环&#xff0c;环上n个点&#xff0c;权值为a&#xff0c;有m次修改&#xff0c;每次修改一个aia_iai​&#xff0c;然后让你选取一些数&#xff0c;使环上不存在连续四个以上的数被选取&#xff0c;让你求所选数的最大权值和 解题思路 不难想…

.Net Core功能开关实战

为了快速发布开发完成的功能&#xff0c;企业通常会以比较快的迭代周期持续发布。但是由于某些 原因或场景&#xff0c;需要在发布的时候将某些功能隐藏起来或者小规模的开放&#xff08;例如只有某些特定用户可以使用、或者特定日期开放&#xff09;&#xff0c;通过使用功能开…

学习究竟是为了什么?

今天无意中看到一句话&#xff0c;人如果停止了学习&#xff0c;就开始走向失败。这句话其实应该送给每一个面临30岁焦虑期的开发者&#xff0c;同时也应该成为每一个开发者内心的真实写照。 想问一下大家一个问题&#xff0c;多久没有学习新的知识呢&#xff1f;尤其…

Strategic game

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 2秒&#xff0c;其他语言4秒 空间限制&#xff1a;C/C 10000K&#xff0c;其他语言20000K 64bit IO Format: %lld题目描述 Bob enjoys playing computer games, especially strategic games, but sometimes he c…

ASP.NET Core应用程序容器化、持续集成与Kubernetes集群部署(一)

上个月15日&#xff0c;上海MVP做了一次线下的技术分享活动&#xff0c;我分享的主题是《快速构建容器化的ASP.NET Core应用程序》&#xff0c;有关这次活动的简报&#xff0c;可以参考这里。另外&#xff0c;我的主题分享的PPT也可以点击这里下载。由于线下活动时间紧迫&#…

现代软件工程的《构建之法》

要想了解世界&#xff0c;就必须亲自来打造它。—— 帕韦泽&#xff08;Cesare Pavese&#xff09;国庆假日期间&#xff0c;我重读了邹欣老师的《构建之法》一书。我从事软件行业相关工作超过15年&#xff0c;每每在被问到给在校计算机专业大学生的学习建议时&#xff0c;我都…

【每日一题】8月10日题目精讲—排座椅

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 51200K&#xff0c;其他语言102400K 64bit IO Format: %lld题目描述 上课的时候总有一些同学和前后左右的人交头接耳&#xff0c;这是令小学班主任十分头疼的…

使用Consul做服务发现的若干姿势

从2016年起就开始接触Consul&#xff0c;使用的主要目的就是做服务发现&#xff0c;后来逐步应用于生产环境&#xff0c;并总结了少许使用经验。最开始使用Consul的人不多&#xff0c;为了方便交流创建了一个QQ群&#xff0c;这两年微服务越来越火&#xff0c;使用Consul的人也…