zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

2023-06-13 09:15:29 时间

本文实例讲述了Winform实现调用asp.net数据接口的方法,分享给大家供大家参考。具体实现方法如下:

一、问题:

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

二、解决方法:

在asp.net项目中编写一个数据接口,使用反射辨别响应的方法;以及获取接口的数据。

这里仅仅是介绍如何使用它们,而不讲述使用它们的基本原理,感兴趣的朋友可以在查阅相关资料的基础上做进一步的研究。

三、主要内容:

1、asp.net项目下编写数据接口

2、使用反射分辨调用方法

3、新建一个winform项目测试接口的正确性

现分述如下:

1、在asp.net项目下编写一简单接口

编写一个方法,构造一个json字符串Response即可。代码如下:

复制代码代码如下:

privatevoidExamInfoLogin()
{
   stringaa="8";
   stringbb="9";

   stringroomName=Request.Form["RoomName"];
   if(roomName=="806")
   {
 aa="7";
   }          
   
   StringBuilderjsonStringBuilder=newStringBuilder();
   jsonStringBuilder.Append("{");
   jsonStringBuilder.Append("\"UName\":\"").Append(aa).Append("\",");
   jsonStringBuilder.Append("\"Password\":\"").Append(bb).Append("\"");
   jsonStringBuilder.Append("}");
   Response.Write(jsonStringBuilder.ToString());
}

2、使用反射选取调用方法

假设在aspx页面中有很多方法,而在使用过程中往往仅需要调用其中的某一个方法,此处用反射选取调用方法。

反射过程中使用的常量:

复制代码代码如下:

privateconststringPAGE_PATH_INFO="/AppDataInterface/ExamLogin.aspx";//页面
privateconststringASSEMBLY_NAME="OSCEWEB";//程序集
privateconststringCLASS_NAME="OSCEWEB.AppDataInterface.ExamLogin";//类名

重写OnInit方法:

复制代码代码如下:protectedoverridevoidOnInit(EventArgse)
{
   stringpathInfo=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
 {
    Assemblyassembly=Assembly.Load(ASSEMBLY_NAME);
    Typetype=assembly.GetType(CLASS_NAME);
    MethodInfomethod=type.GetMethod(nameList[0],System.Reflection.BindingFlags.NonPublic|System.Reflection.BindingFlags.Instance);
    method.Invoke(this,null);
 }
 catch(Exceptionex)
 {
    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)无需向数据接口传递数据:

复制代码代码如下:privatevoidbutton1_Click(objectsender,EventArgse)
{
   stringstrURL="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.StreamReaderstreamReader=newSystem.IO.StreamReader(response.GetResponseStream(),Encoding.UTF8);
   stringresponseText=streamReader.ReadToEnd();
   streamReader.Close();
   MessageBox.Show(responseText);
}

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

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

复制代码代码如下:privatevoidbutton2_Click(objectsender,EventArgse)
{
   stringstrURL="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";
   stringparam="RoomName=806";
   ASCIIEncodingencoding=newASCIIEncoding();
   byte[]data=encoding.GetBytes(param);
   request.ContentLength=data.Length;
   System.IO.Streamstream=request.GetRequestStream();
   stream.Write(data,0,data.Length);
   stream.Close();

   response=(System.Net.HttpWebResponse)request.GetResponse();
   System.IO.StreamReaderstreamReader=newSystem.IO.StreamReader(response.GetResponseStream(),Encoding.UTF8);
   stringresponseText=streamReader.ReadToEnd();
   streamReader.Close();
   MessageBox.Show(responseText);
}

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

4、总结

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