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

本文介绍了将WPF项目改写为Android项目的过程中,如何在ASP.NET中创建数据接口供其他平台调用。通过在ASP.NET中编写接口并利用反射来选择和调用所需方法,然后在WinForm项目中测试接口的正确性。内容包括接口编写、反射调用方法的实现以及使用HTTP请求从接口获取数据的示例。
摘要由CSDN通过智能技术生成

最近一个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即可。

518034e170005db9ed3e2bcca32205d0.gif

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());

}

518034e170005db9ed3e2bcca32205d0.gif

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方法:

518034e170005db9ed3e2bcca32205d0.gif

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;

}

}

}

518034e170005db9ed3e2bcca32205d0.gif

在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)无需向数据接口传递数据:

518034e170005db9ed3e2bcca32205d0.gif

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);

}

518034e170005db9ed3e2bcca32205d0.gif

得到的数据是:{"UName":"8","Password":"9"}

2)以post方式向数据接口传递数据,获取接口数据

518034e170005db9ed3e2bcca32205d0.gif

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);

}

518034e170005db9ed3e2bcca32205d0.gif

得到的数据:{"UName":"7","Password":"9"}

4、总结

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

ASP API 接口接收与返回 是一个轻型的、安全的、跨网际的、跨语言的、跨平台的、跨环境的、跨域的、支持复杂对象传输的、支持引用参数传递的、支持内容输出重定向的、支持分级错误处理的、支持会话的、面向服务的高性能远程过程调用协议。 该版本直接解压后就可以使用,其中 属于公共文件。不论是客户端还是服务器端都需要这些文件。 是客户端文件,如果你只需要使用客户端,那么只要有上面那些公共文件和这个文件就可以使用了,使用时,直接在你的程序中包含 phprpc_client.php 就可以,公共文件不需要单独包含。 这三个文件是服务器端需要的文件。 其中 dhparams 目录中包含的是加密传输时用来生成密钥的参数 dhparams.php 是用来读取 dhparams 目录中文件的类。 phprpc_server.php 是服务器端,如果你要使用 PHP 来发布 PHPRPC 服务,只需要包含这个文件就可以了。公共文件和 dhparams.php 都不需要单独包含。 PHP 4.3+、PHP 5、PHP 6 客户端要求开启 socket 扩展。 服务器端需要有 IIS、Apache、lighttpd 等可以运行 PHP 程序的 Web 服务器。 如果服务器端需要加密传输的能力,必须要保证 session 配置正确。 <?php include('php/phprpc_server.php'); //加载文件 function hello($name) { return'Hello ' . $name; } $server = new PHPRPC_Server(); //创建服务端 $server->add(array('hello', 'md5', 'sha1')); //数组形式一次注册多个函数 $server->add('trim'); //单一注册 $server->start(); //开启服务 ?> <?php include ("php/phprpc_client.php"); //加载文件 $client = new PHPRPC_Client('http://127.0.0.1/server.php'); //创建客户端 并连接服务端文件 echo$client->Hello("word"); //调用方法 返回 hello word ?> -------------------------------------------------- --------------------------------------------------- ------------------------------ 服务端其他说明: <?php include('php/phprpc_server.php'); //加载文件 function hello($name) { return'Hello ' . $name; } class Example1 { staticfunction foo() { return'foo'; } function bar() { return'bar'; } } $server = new PHPRPC_Server(); //创建服务端 $server->add('foo', 'Example1'); //静态方法直接调用 $server->add('bar', new Example1()); //非静态方法 需要实例化 //注册别名调用 $server->add('hello', NULL, 'hi'); //第三参数是函数的别名 客户端通过别名来调用函数 $server->add('foo', 'Example1', 'ex1_foo'); $server->add('bar', new Example1(), 'ex1_bar'); $server->setCharset('UTF-8'); //设置编码 $server->setDebugMode(true); //打印错误 $server->setEnableGZIP(true); //启动压缩输出虽然可以让传输的数据量减少,但是它会占用更多的内存和 CPU,因此它默认是关闭的。 $server->start(); //开启服务 ?> -------------------------------------------------- --------------------------------------------------- ---------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值