生成自己的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帮助文档的更多相关文章

  1. 从多个XML文档中读取数据用于显示webapi帮助文档

    前言: 你先得知道HelpPageConfig文件,不知道说明你现在不需要这个,所以下文就不用看了,等知道了再看也不急.当然如果你很知道这个,下文也不用看了,因为你会了. 方法一: new XmlDo ...

  2. 生成自己的Webapi帮助文档(一)

    最近Webapi接口的开发刚刚进入尾声,随之而来的是让用户知道接口的详细参数信息,看过淘宝的接口文档,但网上没找到他的实现方式 虽然新建Webapi时C#也会给你一个帮助文档的Area,但是总觉得有些 ...

  3. netcore webapi帮助文档设置

    如何建 .netcore webapi 项目这个就不说了,这个都没有没必要看下去. 我这里是.netcore 2.0,虽然没测过1.0的,但想来差不多. 1.Nuget Packages安装,使用程序 ...

  4. ASP.NET WebAPI 测试文档 (Swagger)

    ASP.NET WebAPI使用Swagger生成测试文档 SwaggerUI是一个简单的Restful API测试和文档工具.简单.漂亮.易用(官方demo).通过读取JSON配置显示API .项目 ...

  5. webapi help文档 添加测试功能

    在做webapi项目的时候 webapi为我们提供了help文档,开发者可以参考这个文档,但是这个文档缺少测试功能,如果加上一个测试的功能就更加方便了 于是就研究了下写了一段代码,代码比较简单,只要将 ...

  6. .NET Core WebApi帮助文档使用Swagger生成Api说明文档

    Swagger也称为Open API,Swagger从API文档中手动完成工作,并提供一系列用于生成,可视化和维护API文档的解决方案.简单的说就是一款让你更好的书写API文档的框架. 我们为什么选择 ...

  7. 离线安装swashbuckle(webapi自动文档及测试工具)

    1.找到已经成功安装过的项目根目录的packages文件夹拷贝到新的项目的根目录 2.vs设置nuget程序包源 将源:地址改为新项目的packages文件夹 3.重新编译并修改代码 右键项目-> ...

  8. 生成自己的Webapi帮助文档(二)

    经过今天一上午的修改,已经有个基础的框架了,其它功能只能是在实际使用中发现一个修改一个了. 以下是生成的结果示例: 相比昨天,几个Model都有修改,这里就不一一贴代码了,放个代码包上来,有需要的自己 ...

  9. webapi帮助文档swagger

    nuget安装Swashbuckle包 修改SwaggerConfig文件 //c.IncludeXmlComments(GetXmlCommentsPath()); //设置接口描述xml路径地址 ...

随机推荐

  1. 解决opengl计算顶点的法线问题

    因为需要的论文,最近开始学习OpenGL.由于刚入门的初学者有这么总会遇到很多问题,. 这些天,好不容易才OpenGL个问题弄明确了. 几点迷惑: 在网上百度.发现非常多求平面法向量的介绍以及程序.后 ...

  2. Chromium Graphics Update in 2014(滑动)

    原创文章,转载请注明为链接原始来源对于http://blog.csdn.net/hongbomin/article/details/40897433. 摘要:Chromium图形栈在2014年有多项改 ...

  3. thoughtworks笔试整理

    笔试了,时间1个半小时.没想到居然有7/10是开放性问题.大意例如以下:1.为什么选择增加ThoughtWorks.200字以内,不能用"interesting"."ch ...

  4. ExtJs在disabled和readOnly美学分析

    ExtJs中disabled和readOnly美观度的分析 ExtJs中.假设设置输入框为仅仅读属性,一般第一考虑的都是readonly=true 它的效果和正常输入框一样,可是不同意输入: 然而,它 ...

  5. N-gram统计语言模型(总结)

    N-gram统计语言模型 1.统计语言模型 自然语言从它产生開始,逐渐演变成一种上下文相关的信息表达和传递的方式.因此让计算机处理自然语言.一个主要的问题就是为自然语言这样的上下文相关特性建立数学模型 ...

  6. hightmaps 按地图上显示的统计数据

    离extjs 至 easyui 到html5到hightchars 再到hightmaps.Exjts和easyui很相似,extjs是重量级的,easyui轻量级的.比extjs容易上手.照着dem ...

  7. Net下无敌的ORM

    Dapper ORM 用法—Net下无敌的ORM http://www.renfb.com/blog/2011/Article/335 假如你喜欢原生的Sql语句,又喜欢ORM的简单,那你一定会喜欢上 ...

  8. swift 注意事项 (十六) —— 可选链

    可选链(Optional Chaining) 我们都知道"可选型"是什么.那么可选链又是什么,举个样例解释一下: struct MyName{      var name } st ...

  9. Oracle Data Provider for .NET now on NuGet

    Oracle Data Provider for .NET now on NuGet 时间 2015-03-02 22:30:00  Oracle Bloggers原文  http://cshay.b ...

  10. 用windows性能监视器监控sqlserver的常见指标

    用windows性能监视器监控sqlserver的常见指标   上边文章中提到win的性能监视器是监控数据库性能必备的工具,接下来我就给大家介绍一些常见的监控指标,其实无非就是磁盘,cpu,内存等硬件 ...