欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Winform实现调用asp.net数据接口实例

程序员文章站 2023-12-18 17:47:34
本文实例讲述了winform实现调用asp.net数据接口的方法,分享给大家供大家参考。具体实现方法如下: 一、问题: 最近一个wpf项目需要改写成android项目,...

本文实例讲述了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 = 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、总结

按照上述介绍的一些方法可以完成项目,对此感兴趣的朋友可以动手实践一下,相信会有新的收获!希望本文所述对大家的c#程序设计有所帮助。

上一篇:

下一篇: