最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 14:39:35
文档

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

Winform项目调用asp.net数据接口:最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写一个通用接口,便于其它平台下调用数据。刚接触到这些东西的时候完全是一头雾水,最根本的原因是不明白网站中的一个网页,为什么其它项目就可以访问它,并获取数据。带着疑问在asp.ne
推荐度:
导读Winform项目调用asp.net数据接口:最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写一个通用接口,便于其它平台下调用数据。刚接触到这些东西的时候完全是一头雾水,最根本的原因是不明白网站中的一个网页,为什么其它项目就可以访问它,并获取数据。带着疑问在asp.ne


最近一个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、总结

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

文档

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

Winform项目调用asp.net数据接口:最近一个WPF项目需要改写成android项目,思路是在asp.net项目中编写一个通用接口,便于其它平台下调用数据。刚接触到这些东西的时候完全是一头雾水,最根本的原因是不明白网站中的一个网页,为什么其它项目就可以访问它,并获取数据。带着疑问在asp.ne
推荐度:
标签: 使用 数据 访问
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top