首页 > 代码库 > Winform项目调用asp.net数据接口
Winform项目调用asp.net数据接口
近期一个WPF项目须要改写成android项目,思路是在asp.net项目中编写一个通用接口,便于其他平台下调用数据。刚接触到这些东西的时候全然是一头雾水,最根本的原因是不明确站点中的一个网页,为什么其他项目就能够訪问它,并获取数据。带着疑问在asp.net项目编写一个简单的数据接口,并新建一个小winform项目直接訪问它。本文涉及到的知识点有:在asp.net项目中怎样编写一个数据接口;使用反射辨别响应的方法;以及怎样获取接口的数据。这里不过介绍怎样使用它们,而不讲述使用它们的基本原理。一是本人道行浅薄对基本原理不了解。害怕随便书写误导后人;二是假设阐述其基本原理。势必须要花费大量时间,奈何时间有限。将来假设上述两个条件满足,必会在最以下做出论述,由于这对自己的进步也是一个肯定。闲话少说,開始正文。
主要内容:
1、asp.net项目下编写数据接口
2、使用反射分辨调用方法
3、新建一个winform项目測试接口的正确性
1、在asp.net项目下编写一简单接口
编写一个方法,构造一个json字符串Response就可以。
private void ExamInfoLogin() { string aa = "8"; string bb = "9"; string roomName = Request.Form["RoomName"]; if (roomName == "806") { aa = "7"; } StringBuilder jsonStringBuilder = new StringBuilder(); jsonStringBuilder.Append("{"); jsonStringBuilder.Append("\"UName\":\"").Append(aa).Append("\","); jsonStringBuilder.Append("\"Password\":\"").Append(bb).Append("\""); jsonStringBuilder.Append("}"); Response.Write(jsonStringBuilder.ToString()); }
2、使用反射选取调用方法
如果在aspx页面中有非常多方法,而在使用过程中往往仅须要调用当中的某一个方法。此处用反射选取调用方法。
反射过程中使用的常量:
private const string PAGE_PATH_INFO = "/AppDataInterface/ExamLogin.aspx";//页面 private const string ASSEMBLY_NAME = "OSCEWEB";//程序集 private const string CLASS_NAME = "OSCEWEB.AppDataInterface.ExamLogin";//类名
重写OnInit方法:
protected override void OnInit(EventArgs e) { string pathInfo = Request.Params["PATH_INFO"]; if (pathInfo.StartsWith(PAGE_PATH_INFO + "/")) { string[] nameList = pathInfo.Substring(PAGE_PATH_INFO.Length + 1).Split(‘/‘); if (nameList.Length < 1) { Response.End(); return; } try { Assembly assembly = Assembly.Load(ASSEMBLY_NAME); Type type = assembly.GetType(CLASS_NAME); MethodInfo method = type.GetMethod(nameList[0], System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); method.Invoke(this, null); } catch (Exception ex) { Response.End(); return; } } }
在Page_Load方法中加入:
if (Request.Params["PATH_INFO"].StartsWith(PAGE_PATH_INFO + "/")) { Response.End(); }
3、新建一Winform项目,訪问asp.net中数据接口
公布asp.net项目,网址:http://192.168.4.22:8005
1)无需向数据接口传递数据:
private void button1_Click(object sender, EventArgs e) { string strURL = "http://192.168.4.22:8005/AppDataInterface/ExamLogin.aspx/ExamInfoLogin"; request = (System.Net.HttpWebRequest)WebRequest.Create(strURL); response = (System .Net.HttpWebResponse )request .GetResponse (); System.IO.StreamReader streamReader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8); string responseText = streamReader.ReadToEnd(); streamReader.Close(); MessageBox.Show(responseText); }
得到的数据是:{"UName":"8","Password":"9"}
2)以post方式向数据接口传递数据。获取接口数据
private void button2_Click(object sender, EventArgs e) { string strURL = "http://192.168.4.22:8005/AppDataInterface/ExamLogin.aspx/ExamInfoLogin"; request = (System.Net.HttpWebRequest)WebRequest.Create(strURL); request.Method = "POST"; request.ContentType = "application/x-www-form-urlencoded"; string param = "RoomName=806"; ASCIIEncoding encoding = new ASCIIEncoding (); byte[] data =http://www.mamicode.com/ encoding.GetBytes(param); request.ContentLength = data.Length; System.IO.Stream stream = request.GetRequestStream(); stream.Write(data, 0, data.Length); stream.Close(); response = (System.Net.HttpWebResponse)request.GetResponse(); System.IO.StreamReader streamReader = new System.IO.StreamReader(response.GetResponseStream(), Encoding.UTF8); string responseText = streamReader.ReadToEnd(); streamReader.Close(); MessageBox.Show(responseText); }
得到的数据:{"UName":"7","Password":"9"}
4、总结
依照上述介绍的一些方法确实能完毕项目。可是对其为什么该如此还是充满疑惑。总感觉心中无底、战战兢兢。希望有高手能够对小弟指点一二,不胜感激。
Winform项目调用asp.net数据接口