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

作者:shichen2014 时间:2021-12-16 09:12:48 

本文实例讲述了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#程序设计有所帮助。

标签:Winform,asp.net
0
投稿

猜你喜欢

  • mybatis的大于小于号转义符号一览

    2023-05-31 07:23:03
  • Android 实现双击退出的功能

    2021-06-16 09:08:45
  • 在spring中手写全局异常拦 截器

    2023-11-09 01:25:42
  • 浅析C# 装箱和拆箱

    2022-02-06 17:43:27
  • Android判断用户的网络类型实例讲解(2/3/4G、wifi)

    2022-11-10 23:27:51
  • C#使用DropDownList绑定添加新数据的方法汇总

    2023-05-08 03:20:56
  • Mybatis generator如何自动生成代码

    2023-08-13 10:15:15
  • C#实现加密exe文件

    2023-12-03 13:04:47
  • C#中?、?.、??、??=运算符的用法

    2022-11-10 18:11:51
  • Spring中自定义数据类型转换的方法详解

    2022-10-09 02:56:51
  • Android利用Canvas标点画线并加入位移动画(2)

    2022-04-09 07:57:02
  • Java中的MessageFormat.format用法实例

    2022-06-23 23:31:37
  • C++智能指针读书笔记

    2022-02-24 06:51:28
  • idea使用外置tomcat配置springboot详细步骤

    2023-11-20 03:56:49
  • Java绘制迷宫动画并显示的示例代码

    2022-04-06 22:37:45
  • idea企业开发之新建各类型项目的详细教程

    2023-02-28 05:27:11
  • C#反射(Reflection)详解

    2022-09-16 22:58:11
  • 关于@Autowired注入依赖失败的问题及解决

    2023-11-29 00:50:42
  • 基于SPRINGBOOT配置文件占位符过程解析

    2021-06-27 04:25:12
  • Android CheckBox 的使用案例分析

    2022-02-07 21:00:56
  • asp之家 软件编程 m.aspxhome.com