设为首页 收藏本站
查看: 831|回复: 0

[经验分享] 我这么玩Web Api(一):帮助页面或用户手册(Microsoft and Swashbuckle Help Page)

[复制链接]

尚未签到

发表于 2017-7-4 19:13:37 | 显示全部楼层 |阅读模式
前言
  你需要为客户编写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 = "000001", Name = "平安银行", Exchange = "深证交易所"},
new Stock{Symbol = "000002", Name = "万科A", Exchange = "深证交易所"},
new Stock{Symbol = "000003", Name = "PT金田A", Exchange = "深证交易所"},
new Stock{Symbol = "000004", Name = "国农科技", Exchange = "深证交易所"},
new Stock{Symbol = "000005", 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()
{
}
}
View Code
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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-390765-1-1.html 上篇帖子: OBYC中的Transaction key详细解释以及用法-Group(RMK) 下篇帖子: 优先级队列
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表