使用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 ...
随机推荐
- 译:9.使用Redis进行消息传递
本指南引导您完成使用Spring Data Redis发布和订阅通过Redis发送的消息的过程.Messaging with Redis 1. 我们将构建什么? 您将构建一个使用StringRedis ...
- [svc]find+xargs/exec重命名文件后缀&文件操作工具小结
30天内的文件打包 find ./test_log -type f -mtime -30|xargs tar -cvf test_log.tar.gz awk运算-解决企业统计pv/ip问题 find ...
- FFmpeg: AVPacket 结构体分析
AVPacket是FFmpeg中很重要的一个数据结构,它保存了解封装之后,解码之前的数据(注意:仍然是压缩后的数据)和关于这些数据的一些附加信息,如显示时间戳(pts).解码时间戳(dts).数据时长 ...
- SSH免登录及原理
1.免登陆实现 1)在本机生成公钥/私钥对 ssh-keygen 执行成功后,在.ssh文件夹下,会多出两个文件 id_rsa和id_rsa.pub 2)将公钥写入远端服务器.ssh文件夹下的auth ...
- Selenium Web 自动化 - 项目实战(二)
Selenium Web 自动化 - 项目实战(二) 2016-08-08 什么是数据驱动?简答的理解就是测试数据决定了测试结果,这就是所谓数据驱动.数据驱动包含了数据,他就是测试数据,在自动化领域里 ...
- Android开发(二十三)——Application
参考: [1] Android中Application类用法.http://www.cnblogs.com/renqingping/archive/2012/10/24/Application.htm ...
- YII页面显示trace
修改protected/config/main.php 'db'=>array( 'connectionString' => 'mysql:host=localhost;dbname=te ...
- Godot游戏引擎 3.0 Beta2 于12月21日发布
Beta版继续在修复bug.其官方表示原计划在今年的圣诞节发布3.0 Stable版的,但看来只能继续跳票. 由于开发力量比较单薄,新版本的开发进展算是比较慢的,但3.0这个版本值得期待. Godot ...
- 提一下InfoQ
昨天在微信读书中整理了一个"架构师"清单,把InfoQ中文社区这两年发布的电子书整理到了一起,分享给了团队成员. 如果你去研究InfoQ中文社区,就会发现其中一个人与之因缘际会的相 ...
- Java编程的逻辑 (79) - 方便的CompletionService
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...