Heim  >  Artikel  >  Datenbank  >  Winform项目调用asp.net数据接口

Winform项目调用asp.net数据接口

WBOY
WBOYOriginal
2016-06-07 16:04:421204Durchsuche

最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写一个通用接口,便于其它平台下调用数据。刚接触到这些东西的时候完全是一头雾水,最根本的原因是不明白网站中的一个网页,为什么其它项目就可以访问它,并获取数据。带着疑问在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 = 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、总结

  按照上述介绍的一些方法确实能完成项目,但是对其为什么该如此还是充满疑惑,总感觉心中无底、战战兢兢,希望有高手可以对小弟指点一二,不胜感激。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn