从0到1搭建权限管理系统系列一 .net8 使用Swagger(附当前源码)
<p><strong>说明<br></strong></p><p> 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。</p>
<p> 该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。</p>
<p> 说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。</p>
<p><strong>有兴趣的朋友,请关注我吧(*^▽^*)。</strong></p>
<p><strong>使用前提<br></strong></p>
<p><strong>1、Visual Studio使用2022版本<br></strong></p>
<p><strong>搭建项目<br></strong></p>
<p> OverallAuth2.0依然和OverallAuth1.0一样,采用前后端分离模式,所以搭建后端,我们选择 .net core web api(如下图)<strong><br></strong></p>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161037135-1552827599.png"></p>
<p> </p>
<p><strong> </strong> 选择项目模板后,我们点击【下一步】<strong><br></strong></p>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161052220-911898265.png"></p>
<p> </p>
<p>选择.net 8.0(最新长期支持版本),随后创建项目<strong><br></strong></p>
<p>默认项目结构如下图<strong><br></strong></p>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161103533-47110754.png"></p>
<p> </p>
<p>直接运行,查看默认界面</p>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161117958-1486706222.png"></p>
<p> </p>
<p> 运行起来可以看到,系统默认的swagger界面非常简介,也少了很多信息比如:</p>
<p>1、系统说明、版本、作者等。</p>
<p>2、接口的描述、参数等信息。</p>
<p>3、接口的分类等。<strong><br></strong></p>
<p><strong>优化Swagger<br></strong></p>
<p> 上面说道,系统默认的接口文档是非常简洁的,接下来我们在系统中,这样做,让swagger看起来更优美和专业。</p>
<p> 在项目下新增一个文件件PlugInUnit,然后再该文件夹下新建一个类SwaggerPlugInUnit<strong>。<br></strong></p>
<p><strong> </strong>建好SwaggerPlugInUnit后,在webapi同级建一个类库Utility,用于存放系统的辅助工具等,然后再该类库下建一个Enum文件夹,并新建ModeuleGroupEnum该枚举。</p>
<p>如图:</p>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161135787-838323720.png"></p>
<p> </p>
建好文件后,在ModeuleGroupEnum文件中写一个枚举SysMenu,并保存。<br>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 模块分组
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">enum</span><span style="color: rgba(0, 0, 0, 1)"> ModeuleGroupEnum
{
SysMenu </span>= <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">,
}</span></pre>
</div>
<p>随后在SwaggerPlugInUnit中编写一个方法,具体代码如下</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> swagger插件
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> SwaggerPlugInUnit
{
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 初始化Swagger
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="services"></param></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> InitSwagger(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)"> IServiceCollection services)
{
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">添加swagger</span>
services.AddSwaggerGen(optinos =><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">typeof</span>(ModeuleGroupEnum).GetEnumNames().ToList().ForEach(version =><span style="color: rgba(0, 0, 0, 1)">
{
optinos.SwaggerDoc(version, </span><span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> OpenApiInfo()
{
Title </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">权限管理系统</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
Version </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">V2.0</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
Description </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">求关注,求一键三连</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">,
Contact </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> OpenApiContact { Name = <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">微信公众号作者:不只是码农 b站作者:我不是码农呢</span><span style="color: rgba(128, 0, 0, 1)">"</span>, Url = <span style="color: rgba(0, 0, 255, 1)">new</span> Uri(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">http://www.baidu.com</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">) }
});
});
</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">反射获取接口及方法描述</span>
<span style="color: rgba(0, 0, 255, 1)">var</span> xmlFileName = $<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{Assembly.GetExecutingAssembly().GetName().Name}.xml</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">;
optinos.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFileName), </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
});
}
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> swagger加入路由和管道
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><param name="app"></param></span>
<span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">static</span> <span style="color: rgba(0, 0, 255, 1)">void</span> InitSwagger(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)"> WebApplication app)
{
app.UseSwagger();
app.UseSwaggerUI(options </span>=><span style="color: rgba(0, 0, 0, 1)">
{
</span><span style="color: rgba(0, 0, 255, 1)">typeof</span>(ModeuleGroupEnum).GetEnumNames().ToList().ForEach(versoin =><span style="color: rgba(0, 0, 0, 1)">
{
options.SwaggerEndpoint($</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/swagger/{versoin}/swagger.json</span><span style="color: rgba(128, 0, 0, 1)">"</span>, $<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">接口分类{versoin}</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">);
});
});
}
}</span></pre>
</div>
<pre class="code-snippet__js" data-lang="cs"><span style="font-size: 16px">然后再program中使用自定义swagger中间件<br><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161439487-2111244537.png"></span></pre>
<p> 做好以上步骤,我们的swagger基本算是搭建好了,只需要在控制器上方,添加路由和分组。</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"><summary></span>
<span style="color: rgba(128, 128, 128, 1)">///</span><span style="color: rgba(0, 128, 0, 1)"> 系统模块
</span><span style="color: rgba(128, 128, 128, 1)">///</span> <span style="color: rgba(128, 128, 128, 1)"></summary></span>
<span style="color: rgba(0, 0, 0, 1)">
/</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)]
</pre>
</div>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161523755-2147131863.png"></p>
<p> </p>
<p>做完以上这些,我们对swagger就算优化完成,只需要运行系统,就可以查看效果</p>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161541274-510956673.png"></p>
<p> </p>
<p><strong>注意:</strong>必须生成接口的xml文件,不然会报错。</p>
<p><img src="https://img2024.cnblogs.com/blog/1158526/202409/1158526-20240912161552034-990154104.png"></p>
<p> </p>
<p> 好了,以上就是搭建WebApi+优化Swagger的全部过程,你快来试试吧</p>
<p><strong>如果对你有帮助,请关注我吧(*^▽^*)。<br></strong></p>
<p><strong>源代码地址:https://gitee.com/yangguangchenjie/overall-auth2.0-web-api <br></strong></p>
<p><strong>预览地址:http://139.155.137.144:8880/swagger/index.html</strong></p>
<p><strong>帮我Star,谢谢。</strong></p>
<p><strong>有兴趣的朋友,请关注我吧(*^▽^*)。</strong></p>
<p class="code-snippet__js" data-lang="ruby"><strong><img src="https://img2024.cnblogs.com/blog/1158526/202408/1158526-20240824140446786-404771438.png"></strong></p>
<p>关注我:一个全栈多端的宝藏博主,定时分享技术文章,不定时分享开源项目。关注我,带你认识不一样的程序世界</p><br><br>
来源:https://www.cnblogs.com/cyzf/p/18410483
頁:
[1]