使用c#反射实现接口可视化调试页面
直接上代码,引用CommTools.dll、包括aspx显示页面和aspx.cs获取反射数据源代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CommTools; namespace WebAppReflector
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
const string NameSpace = "CommTools"; //获取CommTools.WebUtils的方法,包括get,set
var ass = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(t => t.FullName.Contains(NameSpace));
if (ass == null) { Response.Write("no assembly"); return; }
var methods = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetMethods();
ddlMethds.DataSource = methods;
ddlMethds.DataBind(); //获取CommTools.WebUtils的属性
var members = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetProperties();
ddlMembers.DataSource = members;
ddlMembers.DataBind(); //获取方法(CommTools.WebUtils类的Get<T>)的请求参数名、类型、返回值类型,public static T Get<T>(string url)
var thisMethod = methods.FirstOrDefault(t => t.Name == "Get");
var reqParams = thisMethod.GetParameters();
ddlParams.Items.AddRange(reqParams.Select(t => new ListItem(t.Name + "|" + t.ParameterType.Name)).ToArray());
Response.Write("返回值类型" + thisMethod.ReturnType.ToString() + "<br/>"); //empty:thisMethod.ReturnParameter.Name }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using CommTools; namespace WebAppReflector
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
const string NameSpace = "CommTools"; //获取CommTools.WebUtils的方法,包括get,set
var ass = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(t => t.FullName.Contains(NameSpace));
if (ass == null) { Response.Write("no assembly"); return; }
var methods = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetMethods();
ddlMethds.DataSource = methods;
ddlMethds.DataBind(); //获取CommTools.WebUtils的属性
var members = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetProperties();
ddlMembers.DataSource = members;
ddlMembers.DataBind(); //获取方法(CommTools.WebUtils类的Get<T>)的请求参数名、类型、返回值类型,public static T Get<T>(string url)
var thisMethod = methods.FirstOrDefault(t => t.Name == "Get");
var reqParams = thisMethod.GetParameters();
ddlParams.Items.AddRange(reqParams.Select(t => new ListItem(t.Name + "|" + t.ParameterType.Name)).ToArray());
Response.Write("返回值类型" + thisMethod.ReturnType.ToString() + "<br/>"); //empty:thisMethod.ReturnParameter.Name //计算并显示toMD5(123)
var aMethod = ass.GetType(string.Format("{0}.{1}", NameSpace, "StringOpertion")).GetMethod("toMD5");
object rspEntity = aMethod.Invoke(null, new[] { "" });
Response.Write("toMD5(123):" + rspEntity + "<br/>"); }
}
}
利用反射,可获取某个程序集内部的所有方法、每个方法的参数、类型等。结合html 控件唯一命名,进行http get或post请求传参数,完全可以做个接口可视化调试页面。
主要思路:获取dll内部的多个方法、绑定显示=》选择某方法,获取该方法内部的属性,以唯一html id显示(简单类型直接显示txt,bool、枚举显示ddl,复杂类型显示答大文本框,给使用者填写json),对于实体注释读取注释xml=》人工赋值后提交,对请求参数使用反射赋值(对于不同类型不同赋值方式),后可以本地直接dll调用、也可以远程http json请求=》获得结果直接json序列化显示

使用c#反射实现接口可视化调试页面的更多相关文章
- 基于socket.io打造hybrid调试页面
前言 参考的钉钉调试页面实现,仅供学习! 功能为: PC端编写代码,手机端执行 解决的痛点是: 避免了调试hybrid应用时重复写各种测试页面 源码与示例 源码 https://github.com/ ...
- UE4物理模块(一)---概述与可视化调试
UE4.21前的版本采用的是NVIDIA的PhysX做为其默认的物理引擎,用于计算3D世界的碰撞查询与物理模拟.自4.21版本开始改物理调用接口,但这并不是闲来重构代码,果然在2019GDC大会上放出 ...
- Postman - 功能强大的 API 接口请求调试和管理工具
Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...
- 开源发布:VS代码段快捷方式及可视化调试快速部署工具
前言: 很久前,我发过两篇文章,分别介绍自定义代码版和可视化调试: 1:Visual Studio 小技巧:自定义代码片断 2:自定义可视化调试工具(Microsoft.VisualStudio.De ...
- eclipse-debug时直接进入/不进入/提示进入调试页面修改
eclipse使用debug调试程序时 默认设置每次程序走到断点位置时提示是否进入调试页面(如图) 而个人习惯有些系统直接进入调试页面.也有些人系统不进入调试页面调试 在这里勾选Remember my ...
- 【转】手机web前端调试页面的几种方式
前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...
- Halcon12新特性之VS可视化调试插件
当我们用VC\C#调试halcon代码的时候,通常会遇到一个头痛的问题,我们无法看到halcon变量的调试信息 如下图:什么鬼...什么鬼 比如我们想看一个double数值变量,我们需要 doub ...
- IE调试页面总结
随着IE版本的升级,IE变的越来越强大,随之带来的问题也是越来越明显,如:如何调试在低版本的浏览器中 的情况 IE9的方法: 出于未知需求,用户在安装了较高版本IE浏览器(IE9)之后,又需要使用低版 ...
- chrome 一进入调试页面就会自己主动打断点
近期在用chrome调试页面时.一刷新页面总会自己主动打断点.自己鼓捣了一下,发现 把它改为这个样子的时候就能够解决问题,即把调试面板上的第5个button从Deactivate breakpoint ...
随机推荐
- HttpURLConnection与HttpClient比较和使用示例
1. GET请求与POST请求 HTTP协议是现在Internet上使用得最多.最重要的协议了,越来越多的Java应用程序需要直接通过HTTP协议来访问网络资源. 在介绍HttpURLConnecti ...
- java框架篇---hibernate之CRUD操作
CRUD是指在做计算处理时的增加(Create).读取(Retrieve)(重新得到数据).更新(Update)和删除(Delete)几个单词的首字母简写. 下面列举实例来讲解这几个操作: 实体类: ...
- vue用组件构建应用
组件系统是 Vue.js 另一个重要概念,因为它提供了一种抽象,让我们可以用独立可复用的小组件来构建大型应用.如果我们考虑到这点,几乎任意类型的应用的界面都可以抽象为一个组件树: 在 Vue 里,一个 ...
- 前端项目微金所1 - bootstrap模板,Compatible(兼容),Viewport(视口),条件注释,第三方依赖,MediaQuery媒体查询
前端项目微金所笔记1 基础的bootstrap模板 <!DOCTYPE html> <html lang="en"> <head> <me ...
- Fedora Server 21 安装 搜狗拼音输入法
最新文章:Virson’s Blog 借鉴文章:博客园-怒杀神殿 ChinaUnix-firo 百度贴吧-fedora吧 方法一:解压deb安装包方式安装: 如果本机已安装ibus,需要先卸载, ...
- linux手动安装sbt过程
ubuntu14 手动安装sbt 参见官网配置说明http://www.scala-sbt.org/release/tutorial/Manual-Installation.html 1.下载sbt通 ...
- 【转帖】oracle数据类型和对应的java类型
原文地址:http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-03/datacc.ht ...
- 转:Python语言编程学习资料(电子书+视频教程)下载汇总
开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...
- [SLAM] 03. ORB-SLAM2
一年后再读SLAM~ 行业有了不少工程实践方面的突破 一.链接:https://www.zhihu.com/question/53571648/answer/176732257 目前来说,受到业界肯定 ...
- vue封装第三方插件并发布到npm
前言 写此文前特意google了一下,因为有较详细的开发教程我再写意义不大,有把插件封装成组件的教程,有把自己的组件封住成插件的教程,本文主要说明如何把第三方的插件封装成vue插件,简化配置,一键安装 ...