1.前言

1.1 SwaggerUI

SwaggerUI 是一个简单的Restful API 测试和文档工具。简单、漂亮、易用(官方demo)。通过读取JSON 配置显示API. 项目本身仅仅也只依赖一些 html,css.js静态文件. 你可以几乎放在任何Web容器上使用。

1.2 Swashbuckle

Swashbuckle 是.NET类库,可以将WebAPI所有开放的控制器方法生成对应SwaggerUI的JSON配置。再通过SwaggerUI 显示出来。类库中已经包含SwaggerUI 。所以不需要额外安装。

2.快速开始

  • 创建项目 OnlineAPI来封装百度音乐服务(示例下载) ,通过API可以搜索、获取音乐的信息和播放连接。

我尽量删除一些我们demo中不会用到的一些文件,使其看上去比较简洁。

  1. Install-Package Swashbuckle
  • 代码注释生成文档说明。

    Swashbuckle 是通过生成的XML文件来读取注释的,生成 SwaggerUI,JSON 配置中的说明的。

    安装时会在项目目录 App_Start 文件夹下生成一个 SwaggerConfig.cs 配置文件,用于配置 SwaggerUI 相关展示行为的。如图:

  • 将配置文件大概99行注释去掉并修改为
  1. c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name));
  • 并在当前类中添加一个方法
  1. /// <summary>
  2. /// </summary>
  3. /// <param name="name"></param>
  4. /// <returns></returns>
  5. protected static string GetXmlCommentsPath(string name)
  6. {
  7. return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name);
  8. }
  • 紧接着你在此Web项目属性生成选卡中勾选 “XML 文档文件”,编译过程中生成类库的注释文件

  • 添加百度音乐 3个API

  • 访问 http://<youhost>/swagger/ui/index,最终显示效果

  • 我们通过API 测试API 是否成功运行

3.添加自定义HTTP Header

在开发移动端 API时常常需要验证权限,验证参数放在Http请求头中是再好不过了。WebAPI配合过滤器验证权限即可

首先我们需要创建一个 IOperationFilter 接口的类。IOperationFilter

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Http;
  6. using System.Web.Http.Description;
  7. using System.Web.Http.Filters;
  8. using Swashbuckle.Swagger;
  9. namespace OnlineAPI.Utility
  10. {
  11. public class HttpHeaderFilter : IOperationFilter
  12. {
  13. public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
  14. {
  15. if (operation.parameters == null) operation.parameters = new List<Parameter>();
  16. var filterPipeline = apiDescription.ActionDescriptor.GetFilterPipeline();
  17. //判断是否添加权限过滤器
  18. var isAuthorized = filterPipeline.Select(filterInfo => filterInfo.Instance).Any(filter => filter is IAuthorizationFilter);
  19. //判断是否允许匿名方法
  20. var allowAnonymous = apiDescription.ActionDescriptor.GetCustomAttributes<AllowAnonymousAttribute>().Any();
  21. if (isAuthorized && !allowAnonymous)
  22. {
  23. operation.parameters.Add(new Parameter
  24. {
  25. name = "access-key",
  26. @in = "header",
  27. description = "用户访问Key",
  28. required = false,
  29. type = "string"
  30. });
  31. }
  32. }
  33. }
  34. }

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码

  1. c.OperationFilter<HttpHeaderFilter>();

添加Web权限过滤器

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Net.Http;
  6. using System.Text;
  7. using System.Web;
  8. using System.Web.Http;
  9. using System.Web.Http.Controllers;
  10. using Newtonsoft.Json;
  11. namespace OnlineAPI.Utility
  12. {
  13. /// <summary>
  14. ///
  15. /// </summary>
  16. public class AccessKeyAttribute : AuthorizeAttribute
  17. {
  18. /// <summary>
  19. /// 权限验证
  20. /// </summary>
  21. /// <param name="actionContext"></param>
  22. /// <returns></returns>
  23. protected override bool IsAuthorized(HttpActionContext actionContext)
  24. {
  25. var request = actionContext.Request;
  26. if (request.Headers.Contains("access-key"))
  27. {
  28. var accessKey = request.Headers.GetValues("access-key").SingleOrDefault();
  29. //TODO 验证Key
  30. return accessKey == "123456789";
  31. }
  32. return false;
  33. }
  34. /// <summary>
  35. /// 处理未授权的请求
  36. /// </summary>
  37. /// <param name="actionContext"></param>
  38. protected override void HandleUnauthorizedRequest(HttpActionContext actionContext)
  39. {
  40. var content = JsonConvert.SerializeObject(new {State = HttpStatusCode.Unauthorized});
  41. actionContext.Response = new HttpResponseMessage
  42. {
  43. Content = new StringContent(content, Encoding.UTF8, "application/json"),
  44. StatusCode = HttpStatusCode.Unauthorized
  45. };
  46. }
  47. }
  48. }

在你想要的ApiController 或者是 Action 添加过滤器

  1. [AccessKey]

最终显示效果

4.显示上传文件参数

SwaggerUI 有上传文件的功能和添加自定义HTTP Header 做法类似,只是我们通过特殊的设置来标示API具有上传文件的功能

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Http.Description;
  6. using Swashbuckle.Swagger;
  7. namespace OnlineAPI.Utility
  8. {
  9. /// <summary>
  10. ///
  11. /// </summary>
  12. public class UploadFilter : IOperationFilter
  13. {
  14. /// <summary>
  15. /// 文件上传
  16. /// </summary>
  17. /// <param name="operation"></param>
  18. /// <param name="schemaRegistry"></param>
  19. /// <param name="apiDescription"></param>
  20. public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
  21. {
  22. if (!string.IsNullOrWhiteSpace(operation.summary) && operation.summary.Contains("upload"))
  23. {
  24. operation.consumes.Add("application/form-data");
  25. operation.parameters.Add(new Parameter
  26. {
  27. name = "file",
  28. @in = "formData",
  29. required = true,
  30. type = "file"
  31. });
  32. }
  33. }
  34. }
  35. }

在 SwaggerConfig.cs 的 EnableSwagger 配置匿名方法类添加一行注册代码

  1. c.OperationFilter<UploadFilter>();

API 文档展示效果

5.版本和资源

你可以通过下列连接获取相关说明。

OnlineAPI Demo 项目下载

OnlineAPI Demo下载

Swashbuckle 项目地址:

https://github.com/domaindrivendev/Swashbuckle

swagger-ui 项目地址:

https://github.com/swagger-api/swagger-ui

swagger-ui 官网地址:

http://swagger.io/swagger-ui/

如何使 WebAPI 自动生成漂亮又实用在线API文档的更多相关文章

  1. WebApi生成在线API文档--Swagger

    1.前言 1.1 SwaggerUI SwaggerUI 是一个简单的Restful API 测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON 配置显示API. 项目本身仅仅也只依赖 ...

  2. 第十二节:WebApi自动生成在线Api文档的两种方式

    一. WebApi自带生成api文档 1. 说明 通过观察,发现WebApi项目中Area文件夹下有一个HelpPage文件夹,如下图,该文件夹就是WebApi自带的生成Api的方式,如果该文件夹没了 ...

  3. 使用swagger实现在线api文档自动生成 在线测试api接口

    使用vs nuget包管理工具搜索Swashbuckle 然后安装便可 注释依赖于vs生成的xml注释文件

  4. 重新生成RF的测试库API文档

    在dos窗口下执行如下命令: 命令:python -m robot.libdoc 库名称  生成的API文件名.html 例如:python -m robot.libdoc MongoDBLibrar ...

  5. C#WebApi 接口增加备注和测试 默认api文档

    1:配置 接口注释. (1)配置生成xml的路径.我们在项目上面点右键→属性→生成标签页配置xml的路径. (2)在xml的读取路径:在Areas\HelpPage\App_Start\HelpPag ...

  6. 【WebAPI No.4】Swagger实现API文档功能

    介绍: Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为 ...

  7. 【转载】Java Restful API 文档生成工具 smart-doc

    谁说生成api文档就必须要定义注解? 谁说生成接口请求和返回示例必须要在线? 用代码去探路,不断尝试更多文档交付的可能性. 如果代码有生命,为什么不换种方式和它对话! 一.背景 没有背景.就自己做自己 ...

  8. 干掉 Postman?测试接口直接生成API文档,这个工具贼好用

    大家好,我是小富~ 前几天粉丝群有小伙伴问,有啥好用的API文档工具推荐,无意间发现了一款工具,这里马不停蹄的来给大家分享一下. ShowDoc一个非常适合团队的在线API文档工具,也支持用docke ...

  9. 浅析如何在Nancy中生成API文档

    前言 前后端分离,或许是现如今最为流行开发方式,包括UWP.Android和IOS这样的手机客户端都是需要调用后台的API来进行数据的交互. 但是这样对前端开发和APP开发就会面临这样一个问题:如何知 ...

随机推荐

  1. vmware 虚拟机通信拿不到 inet addr 的解决办法

    我在虚拟机上安装完红帽之后,使用ifconfig命令来看网卡的IP,但是,输入命令之后,eht0里面只有 inet6 addr 而没有 inet addr,不多说,上图. 解决办法如下:打开 虚拟机设 ...

  2. Nginx重写

    一.location匹配 1.分类:(1)正则location:~,~*(2)普通location:=,^~,@,无2.匹配规则:(1) =    精确匹配.如果找到,停止搜索(2) ^~    普通 ...

  3. WPF入门教程系列十五——WPF中的数据绑定(一)

    使用Windows Presentation Foundation (WPF) 可以很方便的设计出强大的用户界面,同时 WPF提供了数据绑定功能.WPF的数据绑定跟Winform与ASP.NET中的数 ...

  4. C#设计模式系列:职责链模式(Chain of Responsibility)

    1.职责链模式简介 1.1>.定义 职责链模式是一种行为模式,为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求.将这些对象连接成一条链,并沿着这条链传递该请求,直到有一个对 ...

  5. Spring(四)注解配置Ioc

    原文链接:http://www.orlion.ga/216/ 一.@Autowired beans.xml配置成如下: <?xml version="1.0" encodin ...

  6. Unity3D知识框架

    美术部分:           3d模型,材质,纹理,shader,Animator,Animation,天空盒,灯光效果,烘焙 程序部分:           基本组成:               ...

  7. SAE学习-使用SAE的Storage服务存储图片

    看到园子里面有同学写了一篇<基于PHP实现阿里云开放存储服务>,围观地址:http://www.cnblogs.com/nosqlcoco/p/3474773.html.想起自己也在Sin ...

  8. 理解brk和sbrk

    brk和sbrk的定义 在man手册中定义了这两个函数: #include <unistd.h> int brk(void *addr); void *sbrk(intptr_t incr ...

  9. ssh整合问题总结--使用struts2+Ajax+jquery验证用户名是否已被注册

    在用户模块中的用户注册需求上,通常要进行用户名是否已被注册的验证,今天正好写了这个需求,把详细代码和所遇到的问题贴过来.在使用struts2+ajax时候,通常我们会返回json类型的数据,但是像上面 ...

  10. Cesium应用篇:1快速搭建

    范例中所有范例可以在Github中搜索:ExamplesforCesium Cesium ['siːzɪəm]是一款开源的JavaScript开源库,开发者通过Cesium,实现无插件的创建三维球和二 ...