zoukankan      html  css  js  c++  java
  • Winform实现调用asp.net数据接口实例

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

  • 相关阅读:
    转 通过 spring 容器内建的 profile 功能实现开发环境、测试环境、生产环境配置自动切换
    call_grant_sel.sql
    sql server 2008 评估期已过期解决办法
    (2.3)学习笔记之mysql基础操作(表/库操作)
    (2.2)学习笔记之mysql基础操作(登录及账户权限设置)
    Red Gate系列
    教你使用SQL数据库索引(1-15)
    cache与buffer的区别
    (4.17)什么情况下应该使用索引
    windows server2003/2008中权限账户
  • 原文地址:https://www.cnblogs.com/gq0324/p/8583191.html
Copyright © 2011-2022 走看看