直接上代码,引用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#反射实现接口可视化调试页面的更多相关文章

  1. 基于socket.io打造hybrid调试页面

    前言 参考的钉钉调试页面实现,仅供学习! 功能为: PC端编写代码,手机端执行 解决的痛点是: 避免了调试hybrid应用时重复写各种测试页面 源码与示例 源码 https://github.com/ ...

  2. UE4物理模块(一)---概述与可视化调试

    UE4.21前的版本采用的是NVIDIA的PhysX做为其默认的物理引擎,用于计算3D世界的碰撞查询与物理模拟.自4.21版本开始改物理调用接口,但这并不是闲来重构代码,果然在2019GDC大会上放出 ...

  3. Postman - 功能强大的 API 接口请求调试和管理工具

    Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...

  4. 开源发布:VS代码段快捷方式及可视化调试快速部署工具

    前言: 很久前,我发过两篇文章,分别介绍自定义代码版和可视化调试: 1:Visual Studio 小技巧:自定义代码片断 2:自定义可视化调试工具(Microsoft.VisualStudio.De ...

  5. eclipse-debug时直接进入/不进入/提示进入调试页面修改

    eclipse使用debug调试程序时 默认设置每次程序走到断点位置时提示是否进入调试页面(如图) 而个人习惯有些系统直接进入调试页面.也有些人系统不进入调试页面调试 在这里勾选Remember my ...

  6. 【转】手机web前端调试页面的几种方式

    前言 PC端web页面调试比较容易,这里主要说几种移动端调试的方法,从简单到复杂.从模拟调试到远程调试,大概分为几部分: 1.Chrome DevTools(谷歌浏览器)的模拟手机调试 2.weinr ...

  7. Halcon12新特性之VS可视化调试插件

    当我们用VC\C#调试halcon代码的时候,通常会遇到一个头痛的问题,我们无法看到halcon变量的调试信息 如下图:什么鬼...什么鬼   比如我们想看一个double数值变量,我们需要 doub ...

  8. IE调试页面总结

    随着IE版本的升级,IE变的越来越强大,随之带来的问题也是越来越明显,如:如何调试在低版本的浏览器中 的情况 IE9的方法: 出于未知需求,用户在安装了较高版本IE浏览器(IE9)之后,又需要使用低版 ...

  9. chrome 一进入调试页面就会自己主动打断点

    近期在用chrome调试页面时.一刷新页面总会自己主动打断点.自己鼓捣了一下,发现 把它改为这个样子的时候就能够解决问题,即把调试面板上的第5个button从Deactivate breakpoint ...

随机推荐

  1. 译: 6. RabbitMQ Spring AMQP 之 RPC

    Remote procedure call (RPC) 在第二篇教程中,我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务. 但是如果我们需要在远程计算机上运行一个函数并等待结果呢?嗯,这是一 ...

  2. [MySQL]对于事务并发处理带来的问题,脏读、不可重复读、幻读的理解

    一.缘由 众所周知MySQL从5.5.8开始,Innodb就是默认的存储引擎,Innodb最大的特点是:支持事务.支持行级锁. 既然支持事务,那么就会有处理并发事务带来的问题:更新丢失.脏读.不可重复 ...

  3. Understanding How Graal Works - a Java JIT Compiler Written in Java

    https://chrisseaton.com/truffleruby/jokerconf17/ https://chrisseaton.com/truffleruby/tenthings/ http ...

  4. python和shell变量互相传递

    python -> shell: 1.环境变量 复制代码 代码如下: import os  var=123或var='123'os.environ['var']=str(var)  #envir ...

  5. D3.js学习

    // 1.选择d3.select('p')d3.selectAll('p')d3.select('.txt').style('color', '#fff')// 2.支持动态设置属性// a:随机属性 ...

  6. 2. RNN神经网络模型的不同结构

    1. RNN神经网络模型原理 2. RNN神经网络模型的不同结构 3. RNN神经网络-LSTM模型结构 1. 前言 RNN( Recurrent Neural Network 循环(递归)神经网络) ...

  7. Go Revel - Testing(测试模块)

    revel提供了一个测试框架来方便的为自己的程序编写功能测试用例. 默认创建的应用骨架附带一个简单的测试用例,这里将它作为起点 ##概览 测试保存在`tests`目录: corp/myapp app/ ...

  8. Fedora Server 21下OpenJdk和Oracle Jdk共存

    最新文章:Virson's Blog 参考文章:博客园-三维蚂蚁 Linux公社 1.首先需要下载对应平台的Jdk:Oracle 官网 2.使用yum或rpm命令安装Jdk: yum install ...

  9. 关于C#中的动态数组ArrayList

    在C#中,如果需要数组的长度和元素的个数随着程序的运行不断改变,就可以使用ArrayList类,该类是一个可以动态增减成员的数组. 一.ArrayList类与Array类的区别 ArrayList类实 ...

  10. MYSQL + MHA +keepalive + VIP安装配置(二)--MHA的配置

    一.总概 1.MHA介绍 MHA(Master High Availability)是自动的master故障转移和Slave提升的软件包.它是基于标准的MySQL复制(异步/半同步).      MH ...