本文详细的介绍了.net从一个新的项目中创建api后集成swagger调试接口的流程!

1、首先我们创建一个MVC项目(VS2012):

2、然后在项目中的Controllers文件夹中添加API接口文件(WebApi):

 

创建之后,接口中随便写一个获取信息的方法:

3、集成swagger,通过nuget管理平台添加(右键网站项目-->管理NuGet程序包):

在打开的NuGet包程序管理界面,联机输入:Swashbuckle 搜索。

 

在打开的NuGet包程序管理界面,联机输入:swagger 搜索。

 

在打开的NuGet包程序管理界面,联机输入:WebActivatorEx 搜索。

 

安装之后在App_Start文件夹下会自动生成的swagger配置文件SwaggerConfig.cs:

 

4、安装之后还没法正常访问swagger,需要配置网站属性:

修改自动生成的SwaggerConfig文件

注意配置生成的xml文档位置(swagger接口注释用的):

c.IncludeXmlComments(string.Format("{0}/Doc/CYP.GMS.CooperativeBusiness.WebService.XML", System.AppDomain.CurrentDomain.BaseDirectory));
c.IncludeXmlComments(string.Format("{0}/Doc/CYP.GMS.CooperativeBusiness.Model.XML", System.AppDomain.CurrentDomain.BaseDirectory));

也可以自定义一个独立方法来配置:

c.IncludeXmlComments(GetXmlCommentsPath);

protected static string GetXmlCommentsPath()

{
        var xmlPath = System.String.Format(@"{0}/Doc/CYP.GMS.CooperativeBusiness.WebService.XML", System.AppDomain.CurrentDomain.BaseDirectory);
        return xmlPath ;
 }

注:这里的XML路径和文件名称必须与网站生成的XMl名称一致。

并且需要再WebApiConfig.cs配置中添加  config.Formatters.XmlFormatter.SupportedMediaTypes.Clear();

 
 

5、大功告成:在浏览器中输入如下地址:http://localhost:17420/swagger,显示如下页面:

点击相应的服务,在显示的框中输入对应的信息,再点击“Try it out!”,即可成功调用服务,并可查看返回的结果。

Swagger的一些高级用法

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

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

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 代码段,在最后添加如下代码:

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 头部参数了。如下图:

 

转载于:https://www.cnblogs.com/li150dan/p/9529246.html

.Net WebApi接口之Swagger集成详解相关推荐

  1. STM32接口FSMC/FMC难点详解

    STM32接口FSMC/FMC难点详解 转载   http://blog.sina.com.cn/s/blog_808bca130102x94k.html STM32F767的FMC将外部存储器划分为 ...

  2. php支付宝接口参数错误,php支付接口_php支付宝支付接口程序及参数详解

    摘要 腾兴网为您分享:php支付宝支付接口程序及参数详解,作业盒子,智能互联,智联招聘,小番茄等软件知识,以及雷电游戏中心,天气预报软件,live电视直播,otcbtc,手机街机,lq-630k驱动 ...

  3. C#接口归纳总结实例详解

    本篇文章通过实例代码对接口做了详解,需要的朋友可以参考下 C#接口的学习,在编程中,我们经常会用到接口,那什么是接口呢? 接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接 ...

  4. loopback接口、router ID详解

    目录 loop back接口简介: loopback接口应用: router id 简介: 选举规则: loop back接口简介: loopback接口是一种纯软件性质的虚拟接口.loopback接 ...

  5. java切面不需要接口了吗_详解Spring AOP 实现“切面式”valid校验

    why: 为什么要用aop实现校验? answer: spring mvc 默认自带的校验机制 @Valid + BindingResult, 但这种默认实现都得在Controller方法的中去接收B ...

  6. Collection集合类和Map接口各实现类详解

    Java的集合类(collection接口和Map) 一.集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长 ...

  7. 232接口针脚定义_详解串口通信232/485/422,一文就可以搞定!

    一.RS232基础知识 计算机与计算机或计算机与终端之间的数据传送可以采用串行通讯和并行通讯二种方式.由于串行通讯方式具有使用线路少.成本低,特别是在远程传输时,避免了多条线路特性的不一致而被广泛采用 ...

  8. 接口测试之HTTP协议详解

    引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...

  9. Swagger工具详解

    前言 小编前几天在学习了Swagger,一直都处于迷迷糊糊的,不太明白他的优势,单纯的认为只是提供给我们一个界面用于前后台的交互,其实还有很多其他的功能 What Swagger swagger表示用 ...

  10. webservice接口怎么将xml作为参数传递呢_Rhapsody集成引擎通讯点(接口)出入参详解web服务篇...

    Rhapsody引擎可便捷的集成不同的医疗信息系统,可提供安全的连接.可靠的消息传输和高性能的数据处理等功能.Rhapsody引擎是整个集成平台的核心部分,是可快捷提供服务的关键所在.它可实现数据的内 ...

最新文章

  1. 微信小程序生成小程序二维码 php 直接可以用
  2. HDU 2300 Crashing Robots
  3. 分布式事务:RocketMQ实现分布式事务原理
  4. Cortex-M系列MCU最大亮点是低功耗
  5. python 单链表节点怎么快速定义_线性表链式存储结构之单链表
  6. linux shell中的单引号与双引号的区别(看完就不会有引号的疑问了)(转)
  7. 余贞侠C语言程序设计(课后答案)
  8. SCDM学习笔记(6)
  9. java 1.5.0 gcj_Ubuntu下GCJ的使用
  10. mysql插入失败39_Mysql错误:Duplicateentryamp;#39;127amp;#39;forkeyamp;#39;PRIMARYamp;#39;的解决方法-一团网...
  11. 为什么我们不能坚持到底?
  12. PLC增减计数器示例
  13. 基于Pytorch的MNIST手写数字识别实现(含代码+讲解)
  14. IP远程实施访问另一台电脑
  15. 格里高利历java_格里高利历java错误
  16. 关于 VScode 中使用 python 相对路径找不到的问题(解决)
  17. 阿里合伙人彭翼捷:每个阶段都给自己找一个目标!
  18. 比尔总动员小炎觉醒任务攻略
  19. 编写优质嵌入式C代码
  20. oracle数据库常用的关键字总结

热门文章

  1. CCNP之IPv6技术-过渡技术(NAT-PT)
  2. Spark取出(Key,Value)型数据中Value值为前n条数据
  3. InnoDB与Myisam的六大区别
  4. android调节屏幕亮度
  5. 面试官问:Mybatis Plus 是如何实现动态 SQL 语句的?原理你懂吗?
  6. 面试官:CountDownLatch 与 CyclicBarrier 的使用场景?有什么区别?
  7. 面试官:谈谈分布式一致性机制,我一脸懵逼。。
  8. IntelliJ IDEA For Mac 快捷键,够骚,速度收藏!
  9. 为什么 String hashCode 方法选择数字31作为乘子?
  10. Hadoop、Spark等5种大数据框架对比,你的项目该用哪种?