在换了新工作后,我几乎没有接触到.NET Core了,但是,它是我程序语言中的母语,我怎么能忘了它呢?其实我是想等.NET 5 出来的时候再来学习。在.NET 5正式发布之前还是先对之前的东西复习一下,那么就先从.NET Core 使用swagger生成接口文档开始吧。
这里先配一张图吧
![6c91305f895c4d934d76b24a1a5cc820.png](https://i-blog.csdnimg.cn/blog_migrate/c15134620705b2aacbc39b1dcf5288e3.jpeg)
我非常期待.NET 5 的到来,到正式发布的时候,一定要去尝尝鲜。好了,继续我们的 .NET Core吧,我这里的环境是
- .NET Core 3.1.401
- Microsoft Visual Studio 16.7.2
- Swashbuckle.AspNetCore 5.5.1
好了,我们来用号称宇宙第一IDE的VS创建一个简单的WebAPI项目
![8c5507e9e5bfa01a6483f4bd14738895.png](https://i-blog.csdnimg.cn/blog_migrate/3653641386232b7f34485efda7206221.jpeg)
![9706a9e586e590e3c993738ded2616a7.png](https://i-blog.csdnimg.cn/blog_migrate/5ecde09dcaf1c9f54dfc6a50b3c61b88.jpeg)
这里我没有采用IIS Express方式运行,而我采用的它自宿主的方式
![48fee47b2dca4b5a07558e5550412af5.png](https://i-blog.csdnimg.cn/blog_migrate/b63e87ded4232123820d20f2c64da44e.jpeg)
![b6d2dc2adeab68ef398fe578f4ae112a.png](https://i-blog.csdnimg.cn/blog_migrate/26ffa69ea2efbe4e67b8e63a781a823a.jpeg)
![a9ec77b04bd1b402889144715ae683f1.png](https://i-blog.csdnimg.cn/blog_migrate/c61bd834be40593e7f58915743fb6d61.jpeg)
默认情况下,在调试模式运行的时候,会自动打开默认浏览器,因为在项目有做了设置
![a9aed1fe1338d7446c645267de0b4905.png](https://i-blog.csdnimg.cn/blog_migrate/14ca956f27bdb81329f3bd35644df2c5.jpeg)
我也可以设置我们默认打开的浏览器
![d8eb29c550e1a450d881d4ee7303a3f7.png](https://i-blog.csdnimg.cn/blog_migrate/893b2d0b9926459ee7428cec037ee5cb.jpeg)
在开发WebAPI的时候,没有接口文档是非常难受的,离线文档固然好,但是更新不及时,所以我们需要一个能在线实时更新的的接口文档,那么Swagger备受众多开发者的青睐,所以它成了我们的不二之选。
现在,去引入Swashbuckle.AspNetCore组件,这里有三种方式
- NuGet图形化
- Package Manager命令行 Install-Package Swashbuckle.AspNetCore -Version 5.5.1
- .NET Core CLI 命令 dotnet add CoreDemo.csproj package --version 5.5.1 Swashbuckle.AspNetCore
NeGet方式安装
![6519fee7847bc51da72037f090dbabf3.png](https://i-blog.csdnimg.cn/blog_migrate/533185518d03f90c6ef9c0011ad516f8.jpeg)
![405155ac3b522f4fcfad015eddf7a4fa.png](https://i-blog.csdnimg.cn/blog_migrate/2f40b5da09fc0836bf9e8f40107e75a0.jpeg)
Package Manager命令行
![b3f22ce4c3f4ce83ff53b77a5140fedd.png](https://i-blog.csdnimg.cn/blog_migrate/3ef977c0f61f4b1f491cb1c85cc2b573.jpeg)
.NET Core CLI
![d9fa719c948c1ae494d6323b8288d8e8.png](https://i-blog.csdnimg.cn/blog_migrate/8df88d71caae7093c30a1df030f58c81.jpeg)
然后,我们创建一个Controller类
![d448cac157f97fb5c480b3f9c2b3f0aa.png](https://i-blog.csdnimg.cn/blog_migrate/4ba8764381fd2bb0c26596b77abd2055.jpeg)
![483a73c1bdb6b10a06f0e9ea89b52837.png](https://i-blog.csdnimg.cn/blog_migrate/be1b36df0e59162e72528f62bb0a5aa8.jpeg)
按照向导创建完成后,会基于API模版生成一些基础代码
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace CoreDemo.Controllers{ [Route("api/[controller]")] [ApiController] public class DemoController : ControllerBase { }}
为了演示,先写个简单的GET请求接口
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace CoreDemo.Controllers{ [Route("api/[controller]")] [ApiController] public class DemoController : ControllerBase { [HttpGet] public string GetVersion() { return "V1.0.0.0"; } }}
现在就开始配置Swagger,我们需要分别在ConfigureServices和Configure两个方法中添加引用方法
public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI接口文档", Version = "v1" }); }); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(c => { c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebAPI V1"); }); app.UseDeveloperExceptionPage(); } app.UseHttpsRedirection(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); }); }
现在我们再次运行起来,在浏览器输入https://localhost:5001/swagger来看看效果
![608a3236e2fdee42faa9f37c8941fb3f.png](https://i-blog.csdnimg.cn/blog_migrate/9266a01267598845d897e1f9e00a1e31.jpeg)
初版中的方法上没有注解,现在我们就需要去每个方法上加上注解,这才是接口文档该有的样子
using System;using System.Collections.Generic;using System.Linq;using System.Threading.Tasks;using Microsoft.AspNetCore.Http;using Microsoft.AspNetCore.Mvc;namespace CoreDemo.Controllers{ [Route("api/[controller]")] [ApiController] public class DemoController : ControllerBase { /// /// 查看当前版本号 /// /// [HttpGet] public string GetVersion() { return "V1.0.0.0"; } }}
然后去属性->生成->输出中,把XML文档文件这个选项勾
![1c6e9cdce27ceee0696f84c6fe554031.png](https://i-blog.csdnimg.cn/blog_migrate/026111e9f5d25960f6b793f811bbade0.jpeg)
然后再去ConfigureServices中加载我们输出的XML文档
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new OpenApiInfo { Title = "WebAPI接口文档", Version = "v1" }); var xmlFilePath = $"{AppContext.BaseDirectory}/{Assembly.GetExecutingAssembly().GetName().Name}.xml"; c.IncludeXmlComments(xmlFilePath, true); });
另外,我们再把启动路径改成我们的Swagger,这个每次运行就可以直接打开页面进行测试,而不需要手动去输一次
![e128afaedcee4c9838cfa3bc6c9e2b2a.png](https://i-blog.csdnimg.cn/blog_migrate/502ba316ea08cd0f25262b4e07cc06b1.jpeg)
现在运行起来就可以看到接口的说明了
![6b73dee02b805eabe92a42169870052f.png](https://i-blog.csdnimg.cn/blog_migrate/af4b442099b2c727278937e2b40e4cfd.jpeg)
我们还可以给方法中的参数注解,这里有多种,一种就是直接是多个参数,一种是实体,如果是多个简单的参数,我们依然是直接注解的方式即可
/// /// 打个招呼吧 /// /// 名字 /// [HttpGet("GetName/{name}")] public string GetName(string name) { return $"hello,{name}"; }
![50f25b42a6b0eeeee6bd568aa4dc8962.png](https://i-blog.csdnimg.cn/blog_migrate/0f6ab4aca1dc69604fe592e53adb9ab2.jpeg)
如果是以类为参数,就需要在每个属性上加注解
/// /// 用户信息 /// public class UserDto { /// /// 名字 /// public string Name { get; set; } /// /// 年龄 /// public int Age { get; set; } }
![83fadc2742ec2cfdc6a10b1c3a84ee27.png](https://i-blog.csdnimg.cn/blog_migrate/49c6dade2e4c8c130305b0e5d16d9318.jpeg)
在我们勾选了XML文档文件之后,如果不加注释的话,就会有警告,极为不友善,像这种警告我们是可以忽略的
![bf9233aa772ee1797983fbd6f6d1f604.png](https://i-blog.csdnimg.cn/blog_migrate/c4e8f45125fe8201d28b1c4b2379c315.jpeg)
![1599ef7baae5c9eeaf009772401818bc.png](https://i-blog.csdnimg.cn/blog_migrate/748418b945ac3556087d8e00b3916735.jpeg)
在上图中,我们可以看到错误代码,我们把代码添加到属性->生成->错误和警告->取消显示警告这一行中,然后重新生成一次,警告就会消失
![ee4422dd04c4419490ce786931d5d078.png](https://i-blog.csdnimg.cn/blog_migrate/da1e00c34468ce838d8a069c016b939a.jpeg)
好了,今天就先到这里,我们下回再来尝试下多版本API的Swagger文档以及添加请求头。
本文由中年大叔学编程原创,欢迎关注,带你一起长知识!