这是个什么鬼,第一次见到的时候,我也不知道就花几天时间看了下它的代码

在网上搜索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的更多相关文章

随机推荐

  1. django系列5.4--ORM中执行原生SQL语句, Python脚本中调用django环境

    ORM执行原生sql语句 在模型查询API不够用的情况下,我们还可以使用原始的SQL语句进行查询. Django 提供两种方法使用原始SQL进行查询:一种是使用raw()方法,进行原始SQL查询并返回 ...

  2. A Tool to Clip Images

    using Microsoft.Win32; using System; using System.IO; using System.Text.RegularExpressions; using Sy ...

  3. jenkins 配置。

    为了避免在jenkins操作过程中的权限问题. 将安装在/Users/Shared/jenkins目录下的卸载. sudo launchctl unload /Library/LaunchDaemon ...

  4. 【bzoj4332】【JSOI2012】 分零食 生成函数 FFT

    我们构造$f(x)$的生成函数$G(x)$,那么显然$[x^k]G(x)=Ok^2+Sk+U$ 那么显然,答案即为$\sum_{i=1}^{n} [x^m]G^i(x)$ 我们构造答案的生成函数$F( ...

  5. TestNG的常用注解

    @BeforeSuite:表示此注解的方法会在当前测试集合(Suite)中的任一测试用例开始运行之前执行 @AfterSuite:表示此注解的方法会在当前测试集合(Suite)中的所有测试程序运行结束 ...

  6. 添加或删除 HTML dom元素

    添加或删除 HTML dom元素 创建新的 HTML 元素 如需向 HTML DOM 添加新元素,您必须首先创建该元素(元素节点),然后向一个已存在的元素追加该元素. <div id=" ...

  7. 03——Solr学习之Solr的使用(不会用)

    1.先放上次在linux搭建成功的solr管理UI界面 2.有个很蛋疼的问题我就要吐槽一下了 由于没接触过solr这玩意,在百度上一顿操作搜索怎么用,怎么导入数据,建索引库什么的,看了一大片别人的博客 ...

  8. Kali Linux信息收集工具全集

    001:0trace.tcptraceroute.traceroute 描述:进行路径枚举时,传统基于ICMP协议的探测工具经常会受到屏蔽,造成探测结果不够全面的问题.与此相对基于TCP协议的探测,则 ...

  9. Visual Studio 中的 Office 和 SharePoint 开发

    MSDN Library 开发工具和语言  Visual Studio 中的 Office 和 SharePoint 开发 https://msdn.microsoft.com/zh-cn/libra ...

  10. 自己搞了20万张图片100个分类,tensorflow训练23万次后。。。。。。

    自己搞了20万张图片100个分类,tensorflow训练23万次后...... 我自己把训练用的一张图片,弄乱之后做了一个预测 100个汉字,20多万张图片,tensorflow CNN训练23万次 ...