首页 技术 正文
技术 2022年11月19日
0 收藏 312 点赞 2,888 浏览 4171 个字

最近我们团队一直进行.net core的转型,web开发向着前后端分离的技术架构演进,我们后台主要是采用了asp.net core webapi来进行开发,开始每次调试以及与前端人员的沟通上都存在这效率低下的问题,一次在看微软asp.net core官方文档的时候,发现了swagger这个好东西。然后在实际的项目中引入了该技术。我们开发人员测试自己写的api的过程大大得到了简化,前端人员也可以根据我们提供的swagger help pages 自己进行一些前端代码的测试,大大提高了前后端的开发效率。下面我就拿我自己的真实上线项目来一步一步的讲解如何在asp.net core webapi中引入swagger。(也可以参照微软官方文档:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger)

 一、引入swagger Nuget包

右键点击wepapi项目的依赖项,点击管理Nuget程序包,如下图:

Asp.net core WebApi 使用Swagger生成帮助页实例

在打开的NuGet包程序管理界面,输入:Swashbuckle.AspNetCore 目前该程序包的版本为1.0.0,点击安装。

Asp.net core WebApi 使用Swagger生成帮助页实例

安装完后,需要在项目中的Startup.cs文件中进行配置。

二、配置Swagger

打开Startup.cs 文件,在ConfigureServices 方法中,添加如下代码:

?

123456789101112131415161718 services.AddSwaggerGen(c =>     {       c.SwaggerDoc("v1", new Info       {         Version = "v1",         Title = "TwBusManagement接口文档",         Description = "RESTful API for TwBusManagement",         TermsOfService = "None",         Contact = new Contact { Name = "Alvin_Su", Email = "asdasdasd@outlook.com", Url = "" }       });        //Set the comments path for the swagger json and ui.       var basePath = PlatformServices.Default.Application.ApplicationBasePath;       var xmlPath = Path.Combine(basePath, "twbusapi.xml");       c.IncludeXmlComments(xmlPath);       // c.OperationFilter<HttpHeaderOperation>(); // 添加httpHeader参数     });

注意上段代码的最后三行,是我们api描述文档xml的生成地址和文件名,需要在项目的属性中进行配置。如下图:

Asp.net core WebApi 使用Swagger生成帮助页实例

另外上图中,禁止显示警告中,添加1591 代码,可以过滤掉一些类名没有写注释的报警信息。

最后需要在Configure方法中,添加如下代码,注意下面的代码必须添加在  app.UseMvc() 前面:

?

123456789 // Enable middleware to serve generated Swagger as a JSON endpoint.     app.UseSwagger();      // Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint.     app.UseSwaggerUI(c =>     {       c.SwaggerEndpoint("/swagger/v1/swagger.json", "TwBusManagement API V1");       c.ShowRequestHeaders();     });

以上配置完后,就可以使用Swagger生成的帮助页面了,运行项目后,在浏览器地址 加上后缀 /swagger就可以跳转到帮助页面:

Asp.net core WebApi 使用Swagger生成帮助页实例

当然我们开发人员在开发项目的过程中并不想每次都要手动输入地址才能跳转到帮助页面,这样太麻烦。我们可借助visual studio 进行跳转,如下图:

Asp.net core WebApi 使用Swagger生成帮助页实例

打开 launchSettings.json 文件,把webapi项目的启动路径设置成 swagger。这样每次调试运行项目都会自动跳转到swagger帮助页面

Asp.net core WebApi 使用Swagger生成帮助页实例

三、Swagger的一些高级用法

Swagger非常强大,不仅仅是一些帮助页面信息,还可以进行api的调试。这样就可以不用借助第三方工具 如:postman,进行webapi的调试。swagger经过配置,还可以输入一些http头部信息,如权限认证信息等。下面就来讲解以下具体的配置。

首先我们需要新建一个类 HttpHeaderOperation,让该类继承IOperationFilter 接口,该接口需引入命名空间:Swashbuckle.AspNetCore.SwaggerGen,实现接口方法Apply 代码如下:

?

12345678910111213141516171819202122232425262728293031323334 public class HttpHeaderOperation : IOperationFilter {   public void Apply(Operation operation, OperationFilterContext context)   {     if (operation.Parameters == null)     {       operation.Parameters = new List<IParameter>();     }      var actionAttrs = context.ApiDescription.ActionAttributes();      var isAuthorized= actionAttrs.Any(a => a.GetType() == typeof(AuthorizeAttribute));      if (isAuthorized == false) //提供action都没有权限特性标记,检查控制器有没有     {       var controllerAttrs= context.ApiDescription.ControllerAttributes();        isAuthorized= controllerAttrs.Any(a => a.GetType() == typeof(AuthorizeAttribute));     }      var isAllowAnonymous = actionAttrs.Any(a => a.GetType() == typeof(AllowAnonymousAttribute));      if (isAuthorized && isAllowAnonymous == false)     {       operation.Parameters.Add(new NonBodyParameter()       {         Name = "Authorization", //添加Authorization头部参数         In = "header",         Type = "string",         Required = false       });     }   } }

然后在 Startup.cs 中的 ConfigureServices 方法,找到之前的AddSwaggerGen 代码段,在最后添加如下代码:

?

1234567891011121314151617181920 c.OperationFilter<HttpHeaderOperation>()  services.AddSwaggerGen(c =>      {        c.SwaggerDoc("v1", new Info        {          Version = "v1",          Title = "TwBusManagement接口文档",          Description = "RESTful API for TwBusManagement",          TermsOfService = "None",          Contact = new Contact { Name = "Alvin_Su", Email = "alvin_su@outlook.com", Url = "" }        });         //Set the comments path for the swagger json and ui.        var basePath = PlatformServices.Default.Application.ApplicationBasePath;        var xmlPath = Path.Combine(basePath, "twbusapi.xml");        c.IncludeXmlComments(xmlPath);         c.OperationFilter<HttpHeaderOperation>(); // 添加httpHeader参数      });

这样,我们允许webapi项目后,就可以输入 Authorization 头部参数了。如下图:

Asp.net core WebApi 使用Swagger生成帮助页实例

更多关于Swagger的用法可以参考https://github.com/domaindrivendev/Swashbuckle.AspNetCore 以及微软文档:https://docs.microsoft.com/zh-cn/aspnet/core/tutorials/web-api-help-pages-using-swagger

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,942
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,466
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,281
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,095
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,728
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,765