我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page)
前言
你需要为客户编写Api调用手册?你需要测试你的Api接口?你需要和前端进行接口对接?那么这篇文章应该可以帮到你。本文将介绍创建Web Api 帮助文档页面的两种方式,Microsoft Help Page和Swashbuckle Help Page。
编写RESTful的Web Api
/// <summary>
/// 股票数据接口
/// </summary>
[RoutePrefix("api/stocks")]
public class StocksController : ApiController
{
private readonly List<Stock> _stocks; /// <summary>
/// 构造函数
/// </summary>
public StocksController()
{
_stocks = new List<Stock>
{
new Stock{Symbol = "", Name = "平安银行", Exchange = "深证交易所"},
new Stock{Symbol = "", Name = "万科A", Exchange = "深证交易所"},
new Stock{Symbol = "", Name = "PT金田A", Exchange = "深证交易所"},
new Stock{Symbol = "", Name = "国农科技", Exchange = "深证交易所"},
new Stock{Symbol = "", Name = "世纪星源", Exchange = "深证交易所"}
};
} /// <summary>
/// 获取股票列表
/// </summary>
/// <returns>股票列表</returns>
[HttpGet]
public IEnumerable<Stock> List()
{
return _stocks;
} /// <summary>
/// 获取指定股票
/// </summary>
/// <param name="symbol">股票代码</param>
/// <returns>指定股票</returns>
[HttpGet(), Route("{symbol}", Name = "Get")]
public IHttpActionResult Get(string symbol)
{
var stock = _stocks.SingleOrDefault(n => n.Symbol == symbol);
if (stock == null)
{
return NotFound();
} return Ok(stock);
} /// <summary>
/// 添加一支股票
/// </summary>
/// <param name="stock">股票信息</param>
[HttpPost]
public IHttpActionResult Create(Stock stock)
{
return CreatedAtRoute("Get", new { symbol = stock.Symbol }, stock);
} /// <summary>
/// 更新一支股票
/// </summary>
/// <param name="stock">股票信息</param>
[HttpPut]
public IHttpActionResult Update(Stock stock)
{
if (_stocks.All(n => n.Symbol != stock.Symbol))
{
return NotFound();
} return StatusCode(HttpStatusCode.NoContent);
} /// <summary>
/// 部分更新一支股票
/// </summary>
/// <param name="symbol">股票代码</param>
/// <param name="form">需要更新的股票信息</param>
[HttpPatch, Route("{symbol}")]
public IHttpActionResult PartialUpdate(string symbol, PartialForm form)
{
if (_stocks.All(n => n.Symbol != symbol))
{
return NotFound();
} return StatusCode(HttpStatusCode.NoContent);
} /// <summary>
/// 删除一支股票
/// </summary>
/// <param name="symbol">股票代码</param>
/// <returns>是否删除成功</returns>
[HttpDelete, Route("{symbol}")]
public IHttpActionResult Delete(string symbol)
{
if (_stocks.All(n => n.Symbol != symbol))
{
return NotFound();
} return Ok(true);
} /// <summary>
/// 这个方法不会显示到帮助页面
/// </summary>
[HttpGet, Route("hide")]
[ApiExplorerSettings(IgnoreApi = true)]
public void NotShow()
{ }
}
Microsoft Help Page
1.在Nuget添加Help Page组件。

组件添加完后,会自动生成帮助页面,文件存在区域(Areas)中

2.注册区域(Areas)
在Global.asax文件中的Application_Start()方法添加以下代码:
AreaRegistration.RegisterAllAreas();

浏览生成的帮助页面:http://localhost:xxxx/help

Web API的方法列表已经显示出来了,但是方法的描述还是默认的描述。
3. 修改配置文件生成位置
右键项目属性,指定输出xml。

修改Areas\HelpPage\App_Start\HelpPageConfig.cs中register方法里指定的xml路径为上述指定输出的路径。

再查看帮助页面,方法描述已经和代码注释一致。

注:这里可根据需要把Area中对应页面的英文词条更新成中文,当然样式也可以调整。
4.添加测试工具
在Nuget添加Test Client组件。

在Areas\HelpPage\Views\Help\Api.cshtml添加以下代码:
@Html.DisplayForModel("TestClientDialogs")
@section Scripts {
<link type="text/css" href="~/Areas/HelpPage/HelpPage.css" rel="stylesheet" />
@Html.DisplayForModel("TestClientReferences")
}

再次运行Help Page,每个API说明页面的右下角会多一个测试的按钮。

4.参考
http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/creating-api-help-pages
Swashbuckle Help Page
1.在Nuget添加Swashbuckle组件。

然后就可以浏览生成的帮助页面:http://localhost:xxxx/swagger

Web API的方法列表已经显示出来了,但是方法的描述还没有显示出来。
2. 修改配置文件生成位置
右键项目属性,指定输出xml。

找到SwaggerConfig.cs

把 c.IncludeXmlComments(GetXmlCommentsPath())的注释去掉

实现GetXmlCommentsPath()方法,指定xml路径为上述指定输出的路径。

再查看帮助页面,方法描述已经和代码注释一致。

2. 常见异常
用Nuget引用dll的时候,它会在config中添加依赖项信息,但偶尔会没添加,这时会出现Could not load file or assembly 'XXX' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)异常。

此时只要在config中添加对应的依赖项就好

4.帮助页面词条及样式调整
如果要修改或编辑Swashbuckle Help Page的样式或词条,需要编辑SwaggerConfig.cs,相对Microsoft Help Page可能要复杂一点(我只改过Microsoft的,没改过Swashbuckle的)。具体如何修改可参考:https://github.com/domaindrivendev/Swashbuckle
简单总结
Swashbuckle Help Page搭建起来相对会比较简单,但是样式(自带swagger logo)和词条修改会较麻烦一点,因此,比较适合作为内部接口说明几接口调用测试。
Microsoft Help Page搭建起来相对要麻烦一点点,但是样式和词条修改会方便一点,因此,比较适合作为外部接口调用使用文档。
源码下载
https://github.com/ErikXu/WebApi.HelpPage
我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page)的更多相关文章
- 我这么玩Web Api(二):数据验证,全局数据验证与单元测试
目录 一.模型状态 - ModelState 二.数据注解 - Data Annotations 三.自定义数据注解 四.全局数据验证 五.单元测试 一.模型状态 - ModelState 我理解 ...
- asp.net web api 测试帮助页面建立并测试
asp.net web api 测试帮助页面建立并测试 现在使用WEB API来开发,越来越流行. 在开发过程中的测试调试,可以使用Fiddler等工具来帮助测试外,还有: 在asp.net 中有种方 ...
- 【ASP.NET Web API教程】2.4 创建Web API的帮助页面
原文:[ASP.NET Web API教程]2.4 创建Web API的帮助页面 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. 2.4 ...
- 【ASP.NET Web API教程】2.4 创建Web API的帮助页面[转]
注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容. 2.4 Creating a Help Page for a Web API2.4 创建W ...
- 为 ASP.NET Web API 创建帮助页面(转载)
转载地址:http://www.asp.net/web-api/overview/creating-web-apis/creating-api-help-pages 当创建web API 时,经常要创 ...
- Web API 2 入门——创建ASP.NET Web API的帮助页面(谷歌翻译)
在这篇文章中 创建API帮助页面 将帮助页面添加到现有项目 添加API文档 在敞篷下 下一步 作者:Mike Wasson 创建Web API时,创建帮助页面通常很有用,以便其他开发人员知道如何调用A ...
- Web Api帮助页面或用户手册
我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page) 前言 你需要为客户编写Api调用手册?你需要测试你的Api接口?你需要和 ...
- ASP.NET Web API 2 对 CORS 的支持
CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览器施加的同域策略安全限制. 所谓同域策略, ...
- 【ASP.NET Web API教程】2 创建各种Web API
原文 [ASP.NET Web API教程]2 创建各种Web API Chapter 2: Creating Web APIs第2章 创建各种Web API 本文引自:http://www.asp. ...
随机推荐
- EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解
前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...
- Paypal开发中遇到请求被中止: 未能创建 SSL/TLS 安全通道及解决方案
最近在基于ASP.NET上开发了Paypal支付平台,在ASP.NET开发的过程中没有遇到这个问题,但是引用到MVC开发模式中的时候就出现了"未能创建 SSL/TLS 安全通道及解决方案&q ...
- Javascript实用方法二
承接上一篇, Object keys object的keys方法能够获取一个给定对象的所有键(key/属性名)并以数组的形式返回.这个方法可以用于键的筛选.匹配等. var basket = { st ...
- WebSocket - ( 一.概述 )
说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...
- Hibernate中事务声明
Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...
- (转载) Linux IO模式及 select、poll、epoll详解
注:本文是对众多博客的学习和总结,可能存在理解错误.请带着怀疑的眼光,同时如果有错误希望能指出. 同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案 ...
- Linux初识
在这篇文章中你讲看到如下内容: 计算机的组成及功能: Linux发行版之间的区别和联系: Linux发行版的基础目录及功用规定: Linux系统设计的哲学思想: Linux系统上获取命令帮助,及man ...
- openfire的组件(Component)开发
在之前的文章<Openfire阶段实践总结>中提到过一种openfire的扩展模式Compoent.本文将主要探讨对这种模式的应用与开发方法. 内部与外部组件介绍 在openfire中的许 ...
- SQL Server的AlwaysOn错误19456和41158
SQL Server的AlwaysOn错误19456和41158 最近在公司搞异地数据库容灾,使用AlwaysOn的异地节点进行数据同步,在搭建的过程中遇到了一些问题 软件版本 SQL Server2 ...
- C++右值引用浅析
一直想试着把自己理解和学习到的右值引用相关的技术细节整理并分享出来,希望能够对感兴趣的朋友提供帮助. 右值引用是C++11标准中新增的一个特性.右值引用允许程序员可以忽略逻辑上不需要的拷贝:而且还可以 ...