使用c#反射實現介面可視化調試頁面

來源:互聯網
上載者:User

標籤: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#反射實現介面可視化調試頁面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.