• 使用c#反射实现接口可视化调试页面


    直接上代码,引用CommTools.dll、包括aspx显示页面和aspx.cs获取反射数据源代码

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.UI;
     6 using System.Web.UI.WebControls;
     7 using CommTools;
     8 
     9 namespace WebAppReflector
    10 {
    11     public partial class WebForm1 : System.Web.UI.Page
    12     {
    13         protected void Page_Load(object sender, EventArgs e)
    14         {
    15             const string NameSpace = "CommTools";
    16 
    17             //获取CommTools.WebUtils的方法,包括get,set
    18             var ass = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(t => t.FullName.Contains(NameSpace));
    19             if (ass == null) { Response.Write("no assembly"); return; }
    20             var methods = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetMethods();
    21             ddlMethds.DataSource = methods;
    22             ddlMethds.DataBind();
    23 
    24             //获取CommTools.WebUtils的属性
    25             var members = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetProperties();
    26             ddlMembers.DataSource = members;
    27             ddlMembers.DataBind();
    28 
    29             //获取方法(CommTools.WebUtils类的Get<T>)的请求参数名、类型、返回值类型,public static T Get<T>(string url)
    30             var thisMethod = methods.FirstOrDefault(t => t.Name == "Get");
    31             var reqParams = thisMethod.GetParameters();
    32             ddlParams.Items.AddRange(reqParams.Select(t => new ListItem(t.Name + "|" + t.ParameterType.Name)).ToArray());
    33             Response.Write("返回值类型" + thisMethod.ReturnType.ToString() + "<br/>");  //empty:thisMethod.ReturnParameter.Name
    34             
    35         }
    36     }
    37 }
    View Code
     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.UI;
     6 using System.Web.UI.WebControls;
     7 using CommTools;
     8 
     9 namespace WebAppReflector
    10 {
    11     public partial class WebForm1 : System.Web.UI.Page
    12     {
    13         protected void Page_Load(object sender, EventArgs e)
    14         {
    15             const string NameSpace = "CommTools";
    16 
    17             //获取CommTools.WebUtils的方法,包括get,set
    18             var ass = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(t => t.FullName.Contains(NameSpace));
    19             if (ass == null) { Response.Write("no assembly"); return; }
    20             var methods = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetMethods();
    21             ddlMethds.DataSource = methods;
    22             ddlMethds.DataBind();
    23 
    24             //获取CommTools.WebUtils的属性
    25             var members = ass.GetType(string.Format("{0}.{1}", NameSpace, "WebUtils")).GetProperties();
    26             ddlMembers.DataSource = members;
    27             ddlMembers.DataBind();
    28 
    29             //获取方法(CommTools.WebUtils类的Get<T>)的请求参数名、类型、返回值类型,public static T Get<T>(string url)
    30             var thisMethod = methods.FirstOrDefault(t => t.Name == "Get");
    31             var reqParams = thisMethod.GetParameters();
    32             ddlParams.Items.AddRange(reqParams.Select(t => new ListItem(t.Name + "|" + t.ParameterType.Name)).ToArray());
    33             Response.Write("返回值类型" + thisMethod.ReturnType.ToString() + "<br/>");  //empty:thisMethod.ReturnParameter.Name
    34 
    35             //计算并显示toMD5(123)
    36             var aMethod = ass.GetType(string.Format("{0}.{1}", NameSpace, "StringOpertion")).GetMethod("toMD5");
    37             object rspEntity = aMethod.Invoke(null, new[] { "123" });
    38             Response.Write("toMD5(123):" + rspEntity + "<br/>");
    39             
    40         }
    41     }
    42 }
    View Code

    利用反射,可获取某个程序集内部的所有方法、每个方法的参数、类型等。结合html 控件唯一命名,进行http get或post请求传参数,完全可以做个接口可视化调试页面。

    主要思路:获取dll内部的多个方法、绑定显示=》选择某方法,获取该方法内部的属性,以唯一html id显示(简单类型直接显示txt,bool、枚举显示ddl,复杂类型显示答大文本框,给使用者填写json),对于实体注释读取注释xml=》人工赋值后提交,对请求参数使用反射赋值(对于不同类型不同赋值方式),后可以本地直接dll调用、也可以远程http json请求=》获得结果直接json序列化显示

  • 相关阅读:
    Atitit.软件GUI按钮与仪表盘(01)报警系统
    Atitit.软件仪表盘(7)温度监测子系统电脑重要部件温度与监控and警报
    Atitit.异步编程 java .net php python js 的比较
    Atitit.mssql 数据库表记录数and 表体积大小统计
    Atitit.软件仪表盘(0)软件的子系统体系说明
    Atitit. 单点登录sso 的解决方案 总结
    .atitit.web 推送实现解决方案集合(3)dwr3 Reverse Ajax
    atitit..主流 浏览器 js 引擎 内核 市场份额 attialx总结vOa9
    Atitit.软件仪表盘(4)db数据库子系统监测
    Atitit.软件仪表盘(8)os子系统资源占用监测
  • 原文地址:https://www.cnblogs.com/nlh774/p/6422177.html
Copyright © 2020-2023  润新知