WebApiTestHelpPage
这是个什么鬼,第一次见到的时候,我也不知道就花几天时间看了下它的代码
在网上搜索WebApiTestHelpPage会出来很多相关页面
但是它们都是介绍怎么用的,要么就是怎么添加注释
它是怎么实现的,是什么思想,为什么这样做,又是怎么切入原来的系统并没有讲到
如果你只是想知道怎么让WebApiTestHelpPage出现在你的项目中
你可以参考:http://www.cnblogs.com/landeanfen/p/5210356.html
如果想处理多个项目之间的注释问题
你可以参考:http://blog.csdn.net/aiwuzhi12/article/details/60465983
添加完项目之后:
生成文档的相关代码就在:helpPage这个Areas下具体如下图

这个自动生成文档的插件是怎么实现的呢,是什么样的思想呢
正常情况下如果让我们去做,我们会怎么思考。
Web Api帮助页面显示的都是API接口的描述
那肯定要可以拿到WepApi的原数据才可以
就大概看了一下自动生成的代码
根据以前经验,如果要扩展一个系统,或者要学习一个框架
要看系统的配置,环境,

第一眼看到的就是HelpPageConfig 打开文件又只有一个方法
public static void Register(HttpConfiguration config)
类和方法都是静态的
一般静态的类方法用作对另一个系统的扩展,通过this关键字,委托注入到另一个系统
的核心对象
通过引用找到是谁调用了它,发现在 类
HelpPageAreaRegistration 的RegisterArea方法内调用了
HelpPageConfig.Register(GlobalConfiguration.Configuration);
那么HelpPageAreaRegistration有什么用呢,它实现了AreaRegistration 域注册这个对象
并且重写了它的抽象方法RegisterArea 这意味着只要继承了AreaRegistration这个对象
被重写的方法,在需要的时候都会调用到
那么HelpPageAreaRegistration这个域注册器是怎么被调用到的呢
通过查找 发现AreaRegistration里面有静态的方法
//
// 摘要:
// 注册 ASP.NET MVC 应用程序中的所有区域。
public static void RegisterAllAreas();
//
// 摘要:
// 使用指定的用户定义信息在 ASP.NET MVC 应用程序内注册所有区域。
//
// 参数:
// state:
// 一个包含要传递到区域中的用户定义信息的对象。
public static void RegisterAllAreas(object state);
也许有可能是程序启动的时候,通过调用RegisterAllAreas这个方法,把其他的Area都注入到系统里面来于是在
Global.asax这个文件里面找到了

AreaRegistration.RegisterAllAreas();这行代码
到此helpPage是被系统运行到的已经找到
再回顾一下,通过继承AreaRegistration被系统找到,调用注册RegisterArea的方法
然后在RegisterArea方法内部再初始化路由,初始helpPage的系统配置
HelpPageConfig这个内部到底是干什么的呢
方法内部调用了很多的扩展方法,这些扩展方法都被挂到了ASP.net的核心配置对象
HttpConfiguration 上
这个里面可以拿到系统的很多信息比如HttpConfiguration. Services可以拿到所有系统默认的服务实例
//
// 摘要:
// 获取与此实例关联的默认服务的容器。
//
// 返回结果:
// System.Web.Http.Controllers.ServicesContainer,包含此实例的默认服务。
public ServicesContainer Services { get; }
通过调用ServicesContainer扩展方法
/ /
// 摘要:
// 获取 System.Web.Http.Description.IApiExplorer 服务。
//
// 参数:
// services:
// 服务容器。
//
// 返回结果:
// 返回 System.Web.Http.Description.IApiExplorer 实例。
public static IApiExplorer GetApiExplorer(this ServicesContainer services);
拿到当前系统的所有的API接口
这样就可以在页面上显示出来

然后再通过用户的点击去查找具体的API接口信息

就在界面上看到了如下的结果

WebApiTestHelpPage的更多相关文章
随机推荐
- redis 数据备份持久化方案
本文链接:http://www.cnblogs.com/zhenghongxin/p/9050219.html 使用两种备份方案 备份方案选择RDB和AOF同时进行备份,必须打开AOF的持久化机制,除 ...
- hdu4462--曼哈顿距离
题目大意:有N*N个点的田野,然后有k个点是用来放稻草人的,每个稻草人对周围满足曼哈顿距离的庄稼有保护作用 问最小的稻草人的个数能够保护所有庄稼,如果不能保护则输出-1 注意的地方: 1.放稻草人的点 ...
- zoj4020 Traffic Light(bfs+状态压缩)
题意:每个点有两种状态,0/1,0表示只能上下方向走,1表示只能左右方向走.每走一步整个图的状态改变一次(即0->1,1->0). 数据范围:n,m<=1e15 开始迷之因为数组太大 ...
- Elasticsearch批量操作API用法介绍
Elasticsearch的Bulk API允许批量提交index和delete请求,有如下两种用法: 用法1 BulkRequestBuilder requestBuilder = client.p ...
- class字节码结构(一)(字节码结构和字节常量池的结构)
<Java虚拟机原理图解> 1.1.class文件基本组织结构 关于变量的几个叫法: 局部变量/全局变量:很好区分根据所在位置. 类变量:静态的全局变量. 类常量:全局的final修饰的变 ...
- 小div在大div里面水平垂直都居中的实现方法
关于如何设置小盒子在大盒子里面水平垂直方向同时居中的实现方法有很多种,下面仅列举了常用的几种. 首先看一下要实现的效果图及对应的html代码: <div class="parent&q ...
- TCP-IP 端口号
FTP服务器的TCP端口号 21 Telnet服务器的TCP端口号 23 TETP(简单文件传输协议)服务器的UDP端口号 69 任何TCP/IP实现所提供的服务都用1-1023之间的端口号 至 ...
- POJ 2301
#include<iostream> #include<stdio.h> using namespace std; int main() { //freopen("a ...
- Java 并发编程——volatile与synchronized
一.Java并发基础 多线程的优点 资源利用率更好 程序设计在某些情况下更简单 程序响应更快 这一点可能对于做客户端开发的更加清楚,一般的UI操作都需要开启一个子线程去完成某个任务,否者会容易导致客户 ...
- Android 使用zxing生成二维码的方法
public void createQRImage(String url) { try { // 判断URL合法性 if (url == null || "".equals(url ...