生成自己的Webapi帮助文档(一)
最近Webapi接口的开发刚刚进入尾声,随之而来的是让用户知道接口的详细参数信息,看过淘宝的接口文档,但网上没找到他的实现方式
虽然新建Webapi时C#也会给你一个帮助文档的Area,但是总觉得有些太复杂了,实用性值得商榷,于是对他做了些阉割,就有了自己的一个版本。
今天只完成了一些基本框架,具体细节有待进一步实现。
总体思路如下:

1:扩展HttpConfiguration的属性来加入自己的帮助文档生成器,
2:在每个Controller中添加该Controller的帮助信息
3:查看HTML时结合ApiDescription信息和2中添加的帮助信息来生成页面
以下为一些代码:
注册自定义帮助解析器:
public static class HelpPageConfigurationExtensions
{
/// <summary>
/// 添加Controller信息到文档生成器中
/// </summary>
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
/// <param name="sampleObjects">The sample objects.</param>
public static void SetSampleObjects(this System.Web.Http.HttpConfiguration config, ControllerDocumentModel controller)
{
config.GetHelpDocumentGenerator().Controllers.Add(controller);
}
/// <summary>
/// 获取已经注册进来的帮助信息
/// </summary>
/// <param name="config"></param>
/// <returns></returns>
public static List<ControllerDocumentModel> GetSampleObjects(this System.Web.Http.HttpConfiguration config)
{
return config.GetHelpDocumentGenerator().Controllers;
} /// <summary>
/// 在属性中添加文档生成器
/// </summary>
/// <param name="config">The <see cref="HttpConfiguration"/>.</param>
/// <returns>The help page sample generator.</returns>
public static ApiHelpDocumentGenerator GetHelpDocumentGenerator(this System.Web.Http.HttpConfiguration config)
{
return (ApiHelpDocumentGenerator)config.Properties.GetOrAdd(
typeof(ApiHelpDocumentGenerator),
k => new ApiHelpDocumentGenerator());
}
}
每个Controller都会实现一个虚方法,所以这里可以反射来统一调用,把每个Controller的帮助信息添加到生成器的列表中。
public class ApiHelpDocumentRegister
{
public static void Regist(System.Web.Http.HttpConfiguration config)
{
var asm = System.Reflection.Assembly.GetExecutingAssembly(); var controllerTypeList = asm.GetTypes().Where(x => x.BaseType == typeof(_BaseApiController)); foreach (var controllerType in controllerTypeList)
{
var controller = asm.CreateInstance(controllerType.FullName); var method = controllerType.GetMethod("CreateApiHelpDocument",
System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); try
{
var result = method.Invoke(controller, null); config.SetSampleObjects(result as ControllerDocumentModel);
}
catch (NotImplementedException ex)
{
//未实现该方法
}
catch (Exception ex)
{
//其它异常
}
}
}
}
Controller自定义帮助内容
public class ControllerDocumentModel
{
public ControllerDocumentModel()
{
Actions = new List<ActionDocumentModel>();
}
/// <summary>
/// Controller名称
/// </summary>
public string ControllerName { get; set; }
/// <summary>
/// Controller说明
/// </summary>
public string ControllerSummary { get; set; }
/// <summary>
/// Action列表
/// </summary>
public List<ActionDocumentModel> Actions { get; set; }
}
Action自定义帮助内容
public class ActionDocumentModel
{
public ActionDocumentModel()
{
Params = new List<ParamDocumentModel>();
}
/// <summary>
/// Action名称
/// </summary>
public string ActionName { get; set; }
/// <summary>
/// Action说明
/// </summary>
public string ActionSummary { get; set; }
/// <summary>
/// Action参数列表
/// </summary>
public List<ParamDocumentModel> Params { get; set; }
/// <summary>
/// 返回值类型
/// </summary>
public Type ReturnValueType { get; set; }
/// <summary>
/// 返回值说明
/// </summary>
public string ReturnValueSummary { get; set; }
/// <summary>
/// 正常返回值示例
/// </summary>
public object ReturnValueSampleObject_Success { get; set; }
/// <summary>
/// 发生错误时的返回值示例
/// </summary>
public object ReturnValueSampleObject_Failed { get; set; }
}
参数自定义帮助:
public class ParamDocumentModel
{
/// <summary>
/// 参数名称
/// </summary>
public string ParamName { get; set; }
/// <summary>
/// 参数来源
/// </summary>
public ParameterBindings ParameterBinding { get; set; }
/// <summary>
/// 参数说明
/// </summary>
public string ParamSummary { get; set; }
/// <summary>
/// 参数类型
/// </summary>
public Type ParamType { get; set; }
/// <summary>
/// 参数示例数据
/// </summary>
public object ParamSampleObject { get; set; }
}


生成自己的Webapi帮助文档(一)的更多相关文章
- 生成自己的Webapi帮助文档(二)
经过今天一上午的修改,已经有个基础的框架了,其它功能只能是在实际使用中发现一个修改一个了. 以下是生成的结果示例: 相比昨天,几个Model都有修改,这里就不一一贴代码了,放个代码包上来,有需要的自己 ...
- Webapi帮助文档
生成自己的Webapi帮助文档(一) 最近Webapi接口的开发刚刚进入尾声,随之而来的是让用户知道接口的详细参数信息,看过淘宝的接口文档,但网上没找到他的实现方式 虽然新建Webapi时C#也会给你 ...
- .NET Core WebApi帮助文档使用Swagger生成Api说明文档
Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为什么选择 ...
- 离线安装swashbuckle(webapi自动文档及测试工具)
1.找到已经成功安装过的项目根目录的packages文件夹拷贝到新的项目的根目录 2.vs设置nuget程序包源 将源:地址改为新项目的packages文件夹 3.重新编译并修改代码 右键项目-> ...
- .NET项目工程生成一份项目帮助文档chm--Sandcastle工具
Sandcastle的,由Microsoft创建的,是从创建MSDN风格的文档中使用的工具.NET程序集和关联的XML注释文件.目前的版本是 2010年6月发布.这是命令行并没有GUI前端,项目管理功 ...
- 从多个XML文档中读取数据用于显示webapi帮助文档
前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.
- 使用Sandcastle工具为.NET项目工程生成一份项目帮助文档chm
Sandcastle的,由Microsoft创建的,是从创建MSDN风格的文档中使用的工具.NET程序集和关联的XML注释文件.目前的版本是2010年6月发布.这是命令行并没有GUI前端,项目管理功能 ...
- 生成基于Maven的项目文档站点
在Maven中,可以使用“mvn site”,为您的项目信息生成文档站点. mvn site 生成的网站是在项目的“target/site”文件夹中. mvn site 示例 请参见通过“mvn si ...
随机推荐
- [LeetCode] 032. Longest Valid Parentheses (Hard) (C++)
指数:[LeetCode] Leetcode 指标解释 (C++/Java/Python/Sql) Github: https://github.com/illuz/leetcode 032. Lon ...
- Ubuntu 14.04 grub2 温馨提示
昨天win7在...的基础上,刚装几天发布Ubuntu14.04.Ubuntu14.04还是很不错的.但是,今天想去下一个Win7,但没有发现平时的开机显示grub2选项,直接进了Ubuntu! 我感 ...
- JavaScript中的分号插入机制
原文:JavaScript中的分号插入机制 仅在}之前.一个或多个换行之后和程序输入的结尾被插入 也就是说你只能在一行.一个代码块和一段程序结束的地方省略分号. 也就是说你可以写如下代码 functi ...
- 深入探讨 Java 类加载器[转]
原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-classloader/index.html 类加载器(class loader)是 Java™ ...
- C++ 在dynamic_cast<>用法
/*这是从网上断开的试样.主要是关于 dynamic_cast<> 用法.*/ /* 行动:对象指向一个基类(或参考)cast一个指向派生类,dynamic_cast将基于一个基类指针确实 ...
- crm使用soap删除实体
//C# 代码: //DeleteEntityRequest request = new DeleteEntityRequest(); //request.LogicalName = "ne ...
- jquery 直接调用 wcf,面向服务的SOA架构 ( 第三天)
所谓万事 具备,只欠东风了!! 接下来就是 wcf 的调用, 首先 在客户端下,随便 写一个 html页面,然后写入如下方法: <script src="scripts/jquery. ...
- JS读写Cookie(设置、读取、删除)
JS读写Cookie(设置.读取.删除) Cookie是客户端存放数据的一种方式,可用来做状态保持. 1.设置Cookie: a.无过期时间:(若不设置过期时间,默认为会话级Cookie,浏览器关闭就 ...
- 各种oracle参数查询语句
各种oracle参数查询语句 1.show parameter:--显示各个系统参数配置 2.select * from v$parameter;--显示各个系统参数配置 2.show paramet ...
- MVC验证06-自定义错误信息
原文:MVC验证06-自定义错误信息 本文体验自定义错误信息. 系统默认的错误信息 在"MVC验证02-自定义验证规则.邮件验证"中,我们自定义了一个验证Email的类.如果输 ...