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#程序设计有所帮助。

(0)

相关推荐

  • C# Winform 调用系统接口操作 INI 配置文件的代码

    包括了写入和读取功能. 写入的时候, 如果文件不存在会自动创建. 如果对应的键已经存在, 则自动覆盖它的值. 读取的时候, 如果对应的文件不存在, 或者键名不存在, 则返回一个 empty 值. 非常方便 ^_^ 复制代码 代码如下: // 系统接口类 public static class WinAPI { [DllImport("kernel32")] // 写入配置文件的接口 private static extern long WritePrivateProfileString

  • 如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)

    以下是使用js代码实现百度地图计算两地距离,代码如下所示: <script src="js/jquery-1.9.0.js" type="text/javascript" language="javascript"></script> <script language="javascript" type="text/javascript" src="js/area.j

  • C#实现百度ping推送功能的方法

    网站优化必做的事情之一,百度ping,主动推送给百度 文章添加时调用百度推送方法 //保存 protected void btnSubmit_Click(object sender, EventArgs e) { if (action == DTEnums.ActionEnum.Edit.ToString()) //修改 { ChkAdminLevel("channel_" + this.channel_name + "_list", DTEnums.ActionE

  • C#实现百度网站收录和排名查询功能思路及实例

    一.前言 偶然一次在vs2012默认的项目文件夹里发现了以前自己做的一个关于SEO的类库,主要是用来查询某个网址的收录次数还有网站的排行数,后来重构了下,今天拿出来写篇文章,说说自己是如何思考的并完成的. 二.问题描述 首先需要考虑的是能够支持哪些搜索引擎的查询,首先是百度,然后是必应.搜狗.搜搜.360.本来想支持Google但是一想不对,根本不好访问的,所以暂时不算在内.而我们实际要做的就是根据一个网址能够检索出这个网址的在各个搜索引擎的收录次数以及在不同关键词下的网址排行,这里出入的只有网

  • WinForm调用百度地图接口用法示例

    本文实例讲述了WinForm调用百度地图接口用法.分享给大家供大家参考,具体如下: 1.首先用一个html文件调用百度地图接口(主要注册一个序列号): <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www

  • C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法

    本文实例讲述了C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法,分享给大家供大家参考.具体实现方法如下: 一.百度天气 接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hXWAgbsCC9UTkBO5V5Qg1WZ9,其中ak是密钥,自行去申请即可,便于大家测试,楼主就公布并了自己的Key,这样可以直接获取到数据. 获取到的数据是这样的: 复制代码 代码如

  • asp.net c# 调用百度pai实现在线翻译,英文转中文

    首先去百度:注册个apikey http://developer.baidu.com/wiki/index.php?title=%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3%E9%A6%96%E9%A1%B5/%E7%99%BE%E5%BA%A6%E7%BF%BB%E8%AF%91API 然后代码如下只看红色部分就可以了: 复制代码 代码如下: using System; using System.Collections.Generic; using System.L

  • C#开发Android百度地图手机应用程序(多地图展示)

    一.简介 地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰. 文件名:Demo04MultiMapView.cs 简介:介绍多MapView的使用 详述:在一个界面内,同时建立四个TextureMapView控件: 二.示例 1.运行截图 在x86模拟器中的运行效果如下: 在上一节例子的基础上,只需要再增加下面的步骤即可. 2.添加demo05_multimap.axml文件 在layout文件夹下添加该文件,将其改为

  • C#使用ImitateLogin模拟登录百度

    在之前的文章中,我已经介绍过一个社交网站模拟登录的类库:imitate-login ,这是一个通过c#的HttpWebRequest来模拟网站登录的库,之前实现了微博网页版和微博Wap版:现在,模拟百度登录的部分也已经完成.由于个人时间的限制,加上目前有多个项目在同时进行,因此更新频率会根据项目关注度来决定(Star & fork). 这个类库的使用方法非常简单,仅对外提供一个方法: LoginResult Login(1: string userName, 2: string password

  • c#封装百度web服务geocoding api 、百度坐标转换示例

    1.创建基础参数类 复制代码 代码如下: public static class BaiduConstParams    {        public const string PlaceApIv2Search = "http://api.map.baidu.com/place/v2/search";        public const string PlaceApIv2Detail = "http://api.map.baidu.com/place/v2/detail

随机推荐