最近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帮助文档(一)的更多相关文章

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

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

  2. Webapi帮助文档

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

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

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

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

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

  5. .NET项目工程生成一份项目帮助文档chm--Sandcastle工具

    Sandcastle的,由Microsoft创建的,是从创建MSDN风格的文档中使用的工具.NET程序集和关联的XML注释文件.目前的版本是 2010年6月发布.这是命令行并没有GUI前端,项目管理功 ...

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

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

  7. 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.

  8. 使用Sandcastle工具为.NET项目工程生成一份项目帮助文档chm

    Sandcastle的,由Microsoft创建的,是从创建MSDN风格的文档中使用的工具.NET程序集和关联的XML注释文件.目前的版本是2010年6月发布.这是命令行并没有GUI前端,项目管理功能 ...

  9. 生成基于Maven的项目文档站点

    在Maven中,可以使用“mvn site”,为您的项目信息生成文档站点. mvn site 生成的网站是在项目的“target/site”文件夹中. mvn site 示例 请参见通过“mvn si ...

随机推荐

  1. 汉高澳大利亚sinox接口捆绑经典winxp,全面支持unicode跨语言处理

    用qtconfig(或者qtconfig-qt4)设置字体后,汉澳sinox视窗界面以跟winxp媲美的界面出现,爽心悦目. 并且视窗使用非常稳定.非常少出现死机无响应现象,堪称完美. 引入unico ...

  2. eclipse 配置android sdk和maven

    首先下载 ADT-22.2.0.rar eclipse-jee-kepler-R-win32-x86_64.zip android SDK4.2.zip 分别解压在一个盘 将ADT里面的两个目录内容相 ...

  3. 多普勒失真信号采样Matlab模拟分析

    多普勒失真信号采样Matlab模拟分析 方案 水声通信指的是使用声信号在水中数据传输. 相对而言.电磁信号在水中吸收严重衰减过快,光信号受水中悬浮颗粒的影响,也无法完毕远距离传输. 这两种信号的传播距 ...

  4. bigdata_spark_源码修改_本地环境搭建_eclise

    Eclipse 下开发调试环境的配置该小节中使用的各项工具分别为:mac (Windows 7)+Eclipse Java EE 4.4.2+Scala 2.10.4+Sbt 0.13.8+Maven ...

  5. 第18章 备忘录模式(Memento Pattern)

    原文  第18章 备忘录模式(Memento Pattern) 备忘录模式       概述: 备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Toke ...

  6. javascript系列之执行上下文

    原文:javascript系列之执行上下文 写在前面:一 直想系统的总结一下学过的javascript知识,喜欢这门语言也热爱这门语言.未来想从事前端方面的工作,提前把自己的知识梳理一下.前面写了些 ...

  7. 经典算法题每日演练——第七题 KMP算法

    原文:经典算法题每日演练--第七题 KMP算法 在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树 ...

  8. PHP_零基础学php

    现在学习php的工具有很多,所以一般没必要去搭建环境,我用的工具是phpstudy,IDE是Eclipse 1,用php输出一段文字 <html> <head> <tit ...

  9. WCF消息交换模式之双工通讯(Duplex)

    WCF消息交换模式之双工通讯(Duplex) 双工通讯Duplex具有以下特点: 1它可以在处理完请求之后,通过请求客户端中的回调进行响应操作 2.消息交换过程中,服务端和客户端角色会发生调换 3.服 ...

  10. Android DES AES MD5加密

    AES加密: <span style="font-size:18px;">package com.example.encrypdate.util; import jav ...