使用第三方提供的swgger ui 可有效提高 web api 接口列表的阅读性,并且可以在页面中测试服务接口。

但本人在查阅大量资料并进行编码测试后,发现大部分的swagger实例并不能有效运行。例如如下两个网址:http://www.cnblogs.com/caodaiming/p/4156476.html 和 http://bitoftech.net/2014/08/25/asp-net-web-api-documentation-using-swagger/。经过本人的一番折腾,最终发现,原来是由版本的差异导致的(以上两个例子在4.2.0版本下运行成功,读者可自行测试)。哎,要是这些作者能够标出插件包的版本,真能省下很多功夫。

目前Swashbuckle的最新稳定版本为5.2.1版。这个版本的编码方式与4.2.0版本有一定差异,本文也以5.2.1版本为例进行说明。

注:本文使用OWIN来自寄宿(self-host) web api,不清楚的读者可参考:http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-host-web-api。

1、新建一个控制台应用程序OwinConsoleApp。Nuget分别添加Swashbuckle(5.2.1版本)和Microsoft.AspNet.WebApi.OwinSelfHost。添加Swashbuckle时,会在项目中自动添加App_Start文件夹和一个文件名为“SwaggerConfig”的文件。

2、新建一个StudentController文件, 代码如下:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web.Http;
  4. using System.Web.Http.Description;
  5. namespace OwinConsoleApp
  6. {
  7. /// <summary>
  8. /// 学生信息
  9. /// </summary>
  10. public class StudentController : ApiController
  11. {
  12. /// <summary>
  13. /// 得到所有的学生信息
  14. /// </summary>
  15. /// <returns></returns>
  16. public IEnumerable<string> Get()
  17. {
  18. return new List<string>() { "student A", "student B" };
  19. }
  20. /// <summary>
  21. /// 根据学生编号得到学生信息
  22. /// </summary>
  23. /// <param name="Id">学生编号</param>
  24. /// <returns></returns>
  25. public string Get(int Id)
  26. {
  27. return "学号:" + Id;
  28. }
  29. /// <summary>
  30. /// 添加学生
  31. /// </summary>
  32. /// <param name="studentModel">学生实体</param>
  33. /// <remarks>添加一个新的学生</remarks>
  34. /// <response code="400">Bad request </response>
  35. /// <response code="500">Internal Server Error</response>
  36. public void Post(String studentModel)
  37. {
  38. }
  39. /// <summary>
  40. /// 修改学生信息
  41. /// </summary>
  42. /// <param name="Id">学生编号</param>
  43. /// <param name="studentModel">学生实体</param>
  44. [ResponseType(typeof(string))]
  45. [ActionName("UpdateStudentById")]
  46. public void Put(int Id, string studentModel)
  47. {
  48. }
  49. /// <summary>
  50. /// 删除学生信息
  51. /// </summary>
  52. /// <param name="Id">学生编号</param>
  53. public void Delete(int Id)
  54. {
  55. }
  56. }
  57. }

3、修改SwaggerConfig文件如下:

  1. using System.Linq;
  2. using System.Web.Http;
  3. using WebActivatorEx;
  4. using OwinConsoleApp;
  5. using Swashbuckle.Application;
  6. [assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]
  7. namespace OwinConsoleApp
  8. {
  9. public class SwaggerConfig
  10. {
  11. public static void Register(HttpConfiguration config)
  12. {
  13. config.EnableSwagger(c =>
  14. {
  15. c.SingleApiVersion("v1", "");
  16. c.IncludeXmlComments(GetXmlCommentsPath());
  17. c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
  18. })
  19. .EnableSwaggerUi();
  20. }
  21. private static string GetXmlCommentsPath()
  22. {
  23. return System.String.Format(@"{0}\Swagger.XML", System.AppDomain.CurrentDomain.BaseDirectory);
  24. }
  25. }
  26. }

4、新建一个Startup文件,代码如下:

  1. using Owin;
  2. using Microsoft.Owin;
  3. using System.Web.Http;
  4. using Swashbuckle.Application;
  5. [assembly: OwinStartup(typeof(OwinConsoleApp.Startup))]
  6. namespace OwinConsoleApp
  7. {
  8. public class Startup
  9. {
  10. public void Configuration(IAppBuilder appBuilder)
  11. {
  12. // Configure Web API for self-host.
  13. HttpConfiguration config = new HttpConfiguration();
  14. config.Routes.MapHttpRoute(
  15. name: "DefaultApi",
  16. routeTemplate: "api/{controller}/{id}",
  17. defaults: new { id = RouteParameter.Optional }
  18. );
  19. SwaggerConfig.Register(config);
  20. appBuilder.UseWebApi(config);
  21. }
  22. }
  23. }

5、修改program程序,代码如下:

  1. using System;
  2. using Microsoft.Owin.Hosting;
  3. namespace OwinConsoleApp
  4. {
  5. class Program
  6. {
  7. static void Main(string[] args)
  8. {
  9. string baseAddress = "http://localhost:9000/";
  10. // Start OWIN host
  11. using (WebApp.Start<Startup>(url: baseAddress))
  12. {
  13. Console.WriteLine("OWIN SERVICE OPEN!");
  14. Console.Read();
  15. }
  16. Console.ReadLine();
  17. }
  18. }
  19. }

6、右键项目属性,在属性的“生成”中设置输出文档:


注:这里的XML文件路径和文件名应与SwaggerConfig文件中的配置保持一致。

7、管理员身份运行程序。在浏览器中输入如下地址:http://localhost:9000/swagger,显示如下页面:


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

后话:搞了两天,终于把swagger搞出来了,当初就是在版本的差异上浪费了太多时间。写此文章,与和我有相同经历的人共勉。文中若有纰漏,还请指出。

ASP.NET Web Api 2 接口API文档美化之Swagger的更多相关文章

  1. Web Api 自动生成帮助文档

    Web Api 自动生成帮助文档   新建Web Api项目之后,会在首页有API的导航菜单,点击即可看到API帮助文档,不过很遗憾,Description 是没有内容的. 怎么办呢? 第一步: 如果 ...

  2. 后端编写Swagger接口管理文档

    Swagger接口管理文档 访问接口文档的网页:http://localhost:8080/swagger-ui/index.html 导入依赖 <dependency> <grou ...

  3. 支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url.

    支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url. 现支付宝的通知有两类. A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式 B页面跳转通 ...

  4. Java实现web在线预览office文档与pdf文档实例

    https://yq.aliyun.com/ziliao/1768?spm=5176.8246799.blogcont.24.1PxYoX 摘要: 本文讲的是Java实现web在线预览office文档 ...

  5. (转)WEB页面导出为Word文档后分页&横向打印的方法

    <html>    <HEAD>        <title>WEB页面导出为Word文档后分页&横向打印的方法 </title>    < ...

  6. Web 前端 UI 组件库文档自动化方案 All In One

    Web 前端 UI 组件库文档自动化方案 All In One 需求 自动化 动态 好用 markdown element-ui 中示例和说明按照一定规则写在md文件中,调用md-loader将md文 ...

  7. 容器环境下如何将NuGet包XML文档添加到Swagger

    容器环境下将NuGet包XML文档添加到Swagger 在.NET Core项目开发过程中,为了实现代码复用,我们将可以重复使用的部分拆分成一个个小的NuGet包.这些NuGet包可以在其他系统中复用 ...

  8. Web Api 2 接口API文档美化

    使用用第三方提供的swgger ui 帮助提高 web api 接口列表的阅读性,并且可以在页面中测试服务接口. 运行程序如下: 注意:在IE中必须输入红色部分. 并且可以对方法进行测试. 在开发we ...

  9. Web API 自动生成帮助文档并使用Web API Test Client 测试

    之前在项目中有用到webapi对外提供接口,发现在项目中有根据webapi的方法和注释自动生成帮助文档,还可以测试webapi方法,功能很是强大,现拿出来与大家分享一下. 先看一下生成的webapi文 ...

随机推荐

  1. ES6学习笔记四(类和对象)

    { // 构造函数和实例 class Parent{ constructor(name='mukewan'){ this.name=name; } } let v_parent=new Parent( ...

  2. RESTful API 设计指南(转)

    网络应用程序,分为前端和后端两个部分.当前的发展趋势,就是前端设备层出不穷(手机.平板.桌面电脑.其他专用设备......). 因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信.这导致AP ...

  3. 题解-poj3682King Arthur's Birthday Celebration

    Problem poj-3682 题目大意:抛一次硬币有\(p\)的概率得到正面,当有\(n\)次正面时停止,抛第\(i\)次的花费为\(2i-1\),求抛的期望次数和期望花费 Solution 本来 ...

  4. 028_nginx_https证书

    一. 事件经过 2017年3月份谷歌和火狐的调查人员发现赛门铁克打破了行业规则误签发127张SSL证书随着调查进一步开展发现误签发的证书数量达到惊人的3万多张. 这个数字震撼了业界专家因为赛门铁克是市 ...

  5. Vue 根组件,局部,全局组件 | 组件间通信,案例组件化

    一 组件 <div id="app"> <h1>{{ msg }}</h1> </div> <script src=" ...

  6. Node.js的那些坑——如何让异步并发方法同步顺序执行(for循环+异步操作)

    1 前言 nodejs的回调,有时候真的是让人又爱又恨的,当需要用for循环把数据依次存入数据库,但是如果使用正常的for循环,永远都是最后一次值的记录,根本不符合要求. 解决此方案有几种,例如闭包( ...

  7. 使用SimHash进行海量文本去重[转]

    阅读目录 1. SimHash与传统hash函数的区别 2. SimHash算法思想 3. SimHash流程实现 4. SimHash签名距离计算 5. SimHash存储和索引 6. SimHas ...

  8. Codeforces 280D k-Maximum Subsequence Sum [模拟费用流,线段树]

    洛谷 Codeforces bzoj1,bzoj2 这可真是一道n倍经验题呢-- 思路 我首先想到了DP,然后矩阵,然后线段树,然后T飞-- 搜了题解之后发现是模拟费用流. 直接维护选k个子段时的最优 ...

  9. Confluence 6 任务的类型

    下面是有关你可以调整的计划任务列表. Confluence 备份(Back Up Confluence) 对 Confluence 站点执行备份操作. 每集群(Per cluster) At 2am ...

  10. Confluence 6 数据模型

    本文档提供了 Confluence 的数据结构视图(schema )和数据模型概念上的的概述. 备注: Hibernate 的映射文件是针对 Confluence 数据模型的直接描述.在系统中的 Co ...