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的更多相关文章
随机推荐
- jzoj100044
完全背包問題 我們可以將數組內每個元素看成一個物品,這樣問題就轉化成: 現有n個物品,每個物品可以取a[i]~b[i]個,價值為d[i],費用為c[i],問怎麼樣取讓費用為0且價值最大 我們可以先每種 ...
- robot framework —— 变量文件
何为变量文件? 变量文件中包含了测试数据中的变量.虽然变量可以通过变量表格中创建, 或者通过命令行设置, 不过这些方法有所局限, 而变量文件可以动态地创建任意类型的变量. 变量文件一般由Python模 ...
- 读DEDECMS找后台目录有感
本文作者:红日安全团队——Mochazz 早上看了先知论坛的这篇文章:解决DEDECMS历史难题–找后台目录 不得不说作者思路确实巧妙,作者巧妙的利用了Windows FindFirstFile和织梦 ...
- CISSP一次通过指南(文末附福利)
2017年12月19日,在上海黄浦区汉口路亚洲大厦17层通过了CISSP认证考试,拖拉了一年,终于成绩还算令人满意,为攒人品将自己一年多的复习心得和大家分享,希望能够帮到需要考证的朋友. 本文作者:i ...
- (6)Oracle基础--简单查询
.基本查询语句 SELECT [DISTINCT] column_name1,... | * FROM table_name [WHERE conditions]; P: DISTINCT关键字的作 ...
- 加快mysql导入导出速度
MySQL导出的SQL语句在处理百万级数据的时候,可能导入要花几小时.在导出时合理使用几个参数,可以大大加快导入的速度. -e 使用包括几个VALUES列表的多行INSERT语法; --max_all ...
- 请求数据分析 xpath语法 与lxml库
前情提要: 上节学过从网上获取请求,获取返回内容,带理 获取内容之后,第二部就是获取请求的数据分析 一:xpath 语法 浏览器一般会自带xpatn 解析 这里大概讲述一下xpath 的基本操作 二: ...
- MiniUi-----Spinner 数值调节器(可以实现任意值的递增)
Spinner 数值调节器可以实现任意值的递增,每次的递增值主要是通过increment="递增值"属性来控制的. 属性 该属性扩展自验证框(validatebox),下面是为微调 ...
- thinkphp5动态生成二维码实例总结
thinkphp5关于动态生成二维码类库总结: 遇到的最大问题如下:我想大部分人也碰到过,所有觉得有必要总结下: thinkphp5提示找不到Qrcode类,可是自己明明都放置到了,vendor 目录 ...
- (转)AIX光盘备份与恢复
AIX光盘备份与恢复 在此之前,说明一下光盘映像的格式UDF和ISO9660 ISO9660: 这是国际标准化组织(ISO)于1985年颁布的通用光盘文件系统.目前使用最广泛的光盘文件系统,能被所有的 ...