一直听说Swagger是做Web API文档的好工具,这次手里暂时没什么事,类体验下它的强大之处。下面是使用Swashbuckle.net 给asp.net web API添加文档的简要步骤。

参考地址:http://www.jianshu.com/p/3329b4126886

项目引入Swagger

Swashbuckle是Swagger在dotnet环境中的实现,在ASP.net项目中加入后即可支持Swagger/UI。5.X版本支持ASP.net, 6.X(beta)版本支持ASP.net Core. 目前项目使用ASP.net for IIS,所以使用了5.6的版本。 关于selfhost和Owin Swashbuckle 的readme有很清楚的描述,可以去查看源码

使用nuget加入Swashbuckle的引用

安装好以后,在App_Start目录下,会有一个SwaggerConfig.cs文件,SwaggerConfig类通过[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]启动时运行。

nuget添加完引用,无须任何配置,编译后,访问 http://localhost:52079/swagger(这里按照自己的项目启动端口更改) 即可看到所有API的文档说明。界面如图所示:

SwaggerConfig简单介绍

SwaggerConfig.cs文件会自动添加到项目的App_Start目录下,代码本身包含大量注释掉的代码,清除后,代码如下:

相关工程需要生成XML文档

在SwaggerConfig 的Register方法的EnableSwagger匿名函数中加上对应的XML文件,修改如下:

  1. public class SwaggerConfig
  2. {
  3. public static void Register()
  4. {
  5. var thisAssembly = typeof(SwaggerConfig).Assembly;
  6. //获取项目文件路径
  7. var baseDirectory = System.Web.HttpContext.Current.Server.MapPath("~/App_Data");
  8. var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".XML";
  9. var commentsFile = Path.Combine(baseDirectory, commentsFileName);
  10.  
  11. GlobalConfiguration.Configuration
  12. .EnableSwagger(c =>
  13. {
  14. //用于启用和设置Swagger的配置信息。
  15. c.SingleApiVersion("v1", "APIUI");
  16. //获取项目指定路径下xml文件
  17. c.IncludeXmlComments(commentsFile);
  18. })
  19. .EnableSwaggerUi(c =>
  20. {
  21. //用于启用UI界面。
  22.  
  23. });
  24. }
  25. }

上述代码把api工程的XML注释加入到Swagger中。一般我们会把viewmodel或者其他类型定义在不同的工程中,通过下面的代码可以继续加入其它xml注释文件。(对应功能需要启用XML文档文件生成)

汉化 SwaggerUI 

新增js,内容如下

  1. 'use strict';
  2.  
  3. /**
  4. * Translator for documentation pages.
  5. *
  6. * To enable translation you should include one of language-files in your index.html
  7. * after <script src='lang/translator.js' type='text/javascript'></script>.
  8. * For example - <script src='lang/ru.js' type='text/javascript'></script>
  9. *
  10. * If you wish to translate some new texsts you should do two things:
  11. * 1. Add a new phrase pair ("New Phrase": "New Translation") into your language file (for example lang/ru.js). It will be great if you add it in other language files too.
  12. * 2. Mark that text it templates this way <anyHtmlTag data-sw-translate>New Phrase</anyHtmlTag> or <anyHtmlTag data-sw-translate value='New Phrase'/>.
  13. * The main thing here is attribute data-sw-translate. Only inner html, title-attribute and value-attribute are going to translate.
  14. *
  15. */
  16. window.SwaggerTranslator = {
  17. _words: [],
  18.  
  19. translate: function () {
  20. var $this = this;
  21. $('[data-sw-translate]').each(function () {
  22. $(this).html($this._tryTranslate($(this).html()));
  23. $(this).val($this._tryTranslate($(this).val()));
  24. $(this).attr('title', $this._tryTranslate($(this).attr('title')));
  25. });
  26. },
  27.  
  28. _tryTranslate: function (word) {
  29. return this._words[$.trim(word)] !== undefined ? this._words[$.trim(word)] : word;
  30. },
  31.  
  32. learn: function (wordsMap) {
  33. this._words = wordsMap;
  34. }
  35. };
  36.  
  37. /* jshint quotmark: double */
  38. window.SwaggerTranslator.learn({
  39. "Warning: Deprecated": "警告:已过时",
  40. "Implementation Notes": "实现备注",
  41. "Response Class": "响应类",
  42. "Status": "状态",
  43. "Parameters": "参数",
  44. "Parameter": "参数",
  45. "Value": "值",
  46. "Description": "描述",
  47. "Parameter Type": "参数类型",
  48. "Data Type": "数据类型",
  49. "Response Messages": "响应消息",
  50. "HTTP Status Code": "HTTP状态码",
  51. "Reason": "原因",
  52. "Response Model": "响应模型",
  53. "Request URL": "请求URL",
  54. "Response Body": "响应体",
  55. "Response Code": "响应码",
  56. "Response Headers": "响应头",
  57. "Hide Response": "隐藏响应",
  58. "Headers": "头",
  59. "Try it out!": "试一下!",
  60. "Show/Hide": "显示/隐藏",
  61. "List Operations": "显示操作",
  62. "Expand Operations": "展开操作",
  63. "Raw": "原始",
  64. "can't parse JSON. Raw result": "无法解析JSON. 原始结果",
  65. "Model Schema": "模型架构",
  66. "Model": "模型",
  67. "apply": "应用",
  68. "Username": "用户名",
  69. "Password": "密码",
  70. "Terms of service": "服务条款",
  71. "Created by": "创建者",
  72. "See more at": "查看更多:",
  73. "Contact the developer": "联系开发者",
  74. "api version": "api版本",
  75. "Response Content Type": "响应Content Type",
  76. "fetching resource": "正在获取资源",
  77. "fetching resource list": "正在获取资源列表",
  78. "Explore": "浏览",
  79. "Show Swagger Petstore Example Apis": "显示 Swagger Petstore 示例 Apis",
  80. "Can't read from server. It may not have the appropriate access-control-origin settings.": "无法从服务器读取。可能没有正确设置access-control-origin。",
  81. "Please specify the protocol for": "请指定协议:",
  82. "Can't read swagger JSON from": "无法读取swagger JSON于",
  83. "Finished Loading Resource Information. Rendering Swagger UI": "已加载资源信息。正在渲染Swagger UI",
  84. "Unable to read api": "无法读取api",
  85. "from path": "从路径",
  86. "server returned": "服务器返回"
  87. });
  88.  
  89. $(function () {
  90. window.SwaggerTranslator.translate();
  91. });

注:右键点击该js文件修改属性为嵌入的资源

修改 SwaggerConfig文件:修改如下

  1. public static void Register()
  2. {
  3. var thisAssembly = typeof(SwaggerConfig).Assembly;
  4. //获取项目文件路径
  5. var baseDirectory = AppDomain.CurrentDomain.BaseDirectory + @"\App_Data\";
  6. var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".XML";
  7.  
  8. var commentsFile = Path.Combine(baseDirectory, commentsFileName);
  9.  
  10. GlobalConfiguration.Configuration
  11. .EnableSwagger(c =>
  12. {
  13. //用于启用和设置Swagger的配置信息。
  14. c.SingleApiVersion("v1", "APIUI");
  15. //获取项目指定路径下xml文件
  16. c.IncludeXmlComments(commentsFile);
  17. })
  18. .EnableSwaggerUi(c =>
  19. {
  20. //用于启用UI界面上的东西。
  21. //加载汉化的js文件,注意 swagger.js文件属性必须设置为“嵌入的资源”。 APIUI.Scripts.swagger.js依次是:项目名称->文件夹->js文件名
  22. c.InjectJavaScript(Assembly.GetExecutingAssembly(), "APIUI.Scripts.swagger.js");
  23. });
  24. }

效果如下:

C# Swagger 生成接口文档的更多相关文章

  1. asp.net core 使用 swagger 生成接口文档

    参考地址:http://www.cnblogs.com/daxnet/p/6181366.html http://www.jianshu.com/p/fa5a9b76f3ed 微软参考文档:https ...

  2. webapi 利用webapiHelp和swagger生成接口文档

    webapi 利用webapiHelp和swagger生成接口文档.均依赖xml(需允许项目生成注释xml) webapiHelp:微软技术自带,仅含有模块.方法.请求-相应参数的注释. swagge ...

  3. .net core 使用 swagger 生成接口文档

    微软参考文档:https://docs.microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs= ...

  4. asp.net core使用Swashbuckle.AspNetCore(swagger)生成接口文档

    asp.net core中使用Swashbuckle.AspNetCore(swagger)生成接口文档 Swashbuckle.AspNetCore:swagger的asp.net core实现 项 ...

  5. Django使用swagger生成接口文档

    参考博客:Django接入Swagger,生成Swagger接口文档-操作解析 Swagger是一个规范和完整的框架,用于生成.描述.调用和可视化RESTful风格的Web服务.总体目标是使客户端和文 ...

  6. Go语言使用swagger生成接口文档

    swagger介绍 Swagger本质上是一种用于描述使用JSON表示的RESTful API的接口描述语言.Swagger与一组开源软件工具一起使用,以设计.构建.记录和使用RESTful Web服 ...

  7. 用Swagger生成接口文档

    Swagger简介 在系统设计的时候,各个应用之间往往是通过接口进行交互的.因此接口的定义在整个团队中就变得尤为重要.我们可以把接口的规范用接口描述语言进行描述,然后Swagger可以根据我们定义的接 ...

  8. WebAPI使用Swagger生成接口文档

    开发工具:VS2017 版本15.7.1 新建项目,选择空模板,下面只勾选WebAPI 配置Web.config <system.webServer> 节点改为 <system.we ...

  9. Spring Boot 集成 Swagger生成接口文档

    目的: Swagger是什么 Swagger的优点 Swagger的使用 Swagger是什么 官网(https://swagger.io/) Swagger 是一个规范和完整的框架,用于生成.描述. ...

  10. spring-boot-route(五)整合Swagger生成接口文档

    目前,大多数公司都采用了前后端分离的开发模式,为了解决前后端人员的沟通问题,后端人员在开发接口的时候会选择使用swagger2来生成对应的接口文档,swagger2提供了强大的页面调试功能,这样可以有 ...

随机推荐

  1. PostgreSQL9.6.2的WINDOWS下安装

    下载链接:https://www.enterprisedb.com/downloads/postgres-postgresql-downloads#windows 安装链接:http://www.cn ...

  2. Ios8之后, 定位的delegate不能触发的问题

    if([CLLocationManager locationServicesEnabled]){ self.locationManage = [[[CLLocationManager alloc] i ...

  3. 底部粘连(stiky footer)布局

    前面的话 在网页设计中,Sticky footers设计是最古老和最常见的效果之一,大多数人都曾经经历过.它可以概括如下:如果页面内容不够长的时候,页脚块粘贴在视窗底部:如果内容足够长时,页脚块会被内 ...

  4. 如何通过命令或脚本方式在Windows上访问linux系统

    很多情况下,我们需要在Windows上写脚本,创建计划任务程序,这个过程中可能需要访问linux系统,执行脚本或者上传下载文件.并且我们也不想在Windows上安装什么东西.那最好的办法就是使用put ...

  5. Servlet和web服务器关系

    前面的博客我详细的罗列了下Servlet的常用的类和接口,然后在前面的前面我类似tomcat模拟了一套web服务器,这里来做一个统一的整理,这样子可以更好的把握Servlet,也可以更好的了解下web ...

  6. Linux使用top与free命令查看CPU与内存使用情况

    top命令: 显示内容解释: 第一行top分别为:当前时间:系统运行天数:使用者个数:系统负载的平均值,后面的三个值分别为1分钟前.5分钟前.15分钟前进程的平均数,这个数值超过 CPU 数目时,说明 ...

  7. ORACLE约束总结

    你对ORACLE约束的了解如何?比较模糊还是相当透彻?如果你对下面几个问题了如指掌的话,恭喜你,你已经对约束掌握得比较好了,不用看这篇文章了.ORACLE的约束有啥功能作用? 有哪些类型约束(不同版本 ...

  8. win10下端口被占用解决办法

    调试socket通信的时候,如果程序未正常结束,重新启动会报端口被占用的错误. 一 查找被占用的端口 解决办法如下:按win+R输入cmd打开控制台,输入 netstat -ano|findstr 8 ...

  9. [DeeplearningAI笔记]改善深层神经网络_优化算法2.3_2.5_带修正偏差的指数加权平均

    Optimization Algorithms优化算法 觉得有用的话,欢迎一起讨论相互学习~Follow Me 2.3 指数加权平均 举个例子,对于图中英国的温度数据计算移动平均值或者说是移动平均值( ...

  10. 初识Python装饰器

    python中,一切皆对象.做为面向对象开发中非常重要的一个环节,函数有着无可替代的作用. 函数可以作为对象赋值给一个变量,可以作为元素添加到集合对象中,可以作为参数值传递给其它函数,还可以当做函数的 ...