標籤:height ica ber public res tar bin ram source
直接上代碼,引用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 WebAppReflector10 {11 public partial class WebForm1 : System.Web.UI.Page12 {13 protected void Page_Load(object sender, EventArgs e)14 {15 const string NameSpace = "CommTools";16 17 //擷取CommTools.WebUtils的方法,包括get,set18 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.Name34 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 WebAppReflector10 {11 public partial class WebForm1 : System.Web.UI.Page12 {13 protected void Page_Load(object sender, EventArgs e)14 {15 const string NameSpace = "CommTools";16 17 //擷取CommTools.WebUtils的方法,包括get,set18 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.Name34 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序列化顯示
使用c#反射實現介面可視化調試頁面