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#程序設計有所幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM