Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口實(shí)例
本文實(shí)例講述了Winform實(shí)現(xiàn)調(diào)用asp.net數(shù)據(jù)接口的方法,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:
一、問題:
最近一個(gè)WPF項(xiàng)目需要改寫成android項(xiàng)目,思路是在asp.net項(xiàng)目中編寫一個(gè)通用接口,便于其它平臺(tái)下調(diào)用數(shù)據(jù)。剛接觸到這些東西的時(shí)候完全是一頭霧水,最根本的原因是不明白網(wǎng)站中的一個(gè)網(wǎng)頁,為什么其它項(xiàng)目就可以訪問它,并獲取數(shù)據(jù)。帶著疑問在asp.net項(xiàng)目編寫一個(gè)簡單的數(shù)據(jù)接口,并新建一個(gè)小winform項(xiàng)目直接訪問它。
二、解決方法:
在asp.net項(xiàng)目中編寫一個(gè)數(shù)據(jù)接口,使用反射辨別響應(yīng)的方法;以及獲取接口的數(shù)據(jù)。
這里僅僅是介紹如何使用它們,而不講述使用它們的基本原理,感興趣的朋友可以在查閱相關(guān)資料的基礎(chǔ)上做進(jìn)一步的研究。
三、主要內(nèi)容:
1、asp.net項(xiàng)目下編寫數(shù)據(jù)接口
2、使用反射分辨調(diào)用方法
3、新建一個(gè)winform項(xiàng)目測(cè)試接口的正確性
現(xiàn)分述如下:
1、在asp.net項(xiàng)目下編寫一簡單接口
編寫一個(gè)方法,構(gòu)造一個(gè)json字符串Response即可。代碼如下:
{
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、使用反射選取調(diào)用方法
假設(shè)在aspx頁面中有很多方法,而在使用過程中往往僅需要調(diào)用其中的某一個(gè)方法,此處用反射選取調(diào)用方法。
反射過程中使用的常量:
private const string ASSEMBLY_NAME = "OSCEWEB";//程序集
private const string CLASS_NAME = "OSCEWEB.AppDataInterface.ExamLogin";//類名
重寫OnInit方法:
{
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方法中添加:
{
Response.End();
}
3、新建一Winform項(xiàng)目,訪問asp.net中數(shù)據(jù)接口
發(fā)布asp.net項(xiàng)目,網(wǎng)址:http://192.168.4.22:8005
1)無需向數(shù)據(jù)接口傳遞數(shù)據(jù):
{
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);
}
得到的數(shù)據(jù)是:{"UName":"8","Password":"9"}
2)以post方式向數(shù)據(jù)接口傳遞數(shù)據(jù),獲取接口數(shù)據(jù)
{
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);
}
得到的數(shù)據(jù):{"UName":"7","Password":"9"}
4、總結(jié)
按照上述介紹的一些方法可以完成項(xiàng)目,對(duì)此感興趣的朋友可以動(dòng)手實(shí)踐一下,相信會(huì)有新的收獲!希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。
- C# Winform 調(diào)用系統(tǒng)接口操作 INI 配置文件的代碼
- C#實(shí)現(xiàn)百度ping推送功能的方法
- C#開發(fā)Android百度地圖手機(jī)應(yīng)用程序(多地圖展示)
- C#使用ImitateLogin模擬登錄百度
- 如何根據(jù)百度地圖計(jì)算出兩地之間的駕駛距離(兩種語言js和C#)
- C#實(shí)現(xiàn)百度網(wǎng)站收錄和排名查詢功能思路及實(shí)例
- C#實(shí)現(xiàn)解析百度天氣數(shù)據(jù),Rss解析百度新聞以及根據(jù)IP獲取所在城市的方法
- c#封裝百度web服務(wù)geocoding api 、百度坐標(biāo)轉(zhuǎn)換示例
- asp.net c# 調(diào)用百度pai實(shí)現(xiàn)在線翻譯,英文轉(zhuǎn)中文
- WinForm調(diào)用百度地圖接口用法示例
相關(guān)文章
C#實(shí)現(xiàn)打印與打印預(yù)覽功能的思路及代碼
這篇文章主要介紹了C#實(shí)現(xiàn)打印與打印預(yù)覽功能的思路及代碼,有需要的朋友可以參考一下2013-12-12Unity實(shí)現(xiàn)簡單換裝系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了Unity實(shí)現(xiàn)簡單換裝系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04C#中泛型舉例List<T>與DataTable相互轉(zhuǎn)換
這篇文章介紹了C#中泛型舉例List<T>與DataTable相互轉(zhuǎn)換的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05C#實(shí)現(xiàn)一個(gè)簡單實(shí)用的TXT文本操作及日志框架詳解
這篇文章主要給大家介紹了關(guān)于利用C#如何實(shí)現(xiàn)一個(gè)簡單實(shí)用的TXT文本操作及日志框架的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們一起來看看吧2018-07-07C#創(chuàng)建安全的字典(Dictionary)存儲(chǔ)結(jié)構(gòu)
本文主要對(duì)存儲(chǔ)結(jié)構(gòu)字典(Dictionary)的一些常用方法進(jìn)行簡單的說明,并闡述了如何創(chuàng)建安全的字典(Dictionary)存儲(chǔ)結(jié)構(gòu)。希望對(duì)大家有所幫助2016-12-12c#實(shí)現(xiàn)服務(wù)器性能監(jiān)控并發(fā)送郵件保存日志
這篇文章主要介紹了c#實(shí)現(xiàn)服務(wù)器性能監(jiān)控并發(fā)送郵件保存日志的示例,代碼分為客戶端和服務(wù)端,客戶端可安裝為本地服務(wù)形式啟動(dòng)2014-01-01C# Winform中DataGridView導(dǎo)出為Excel的實(shí)現(xiàn)示例
本文主要介紹了C# Winform中DataGridView導(dǎo)出為Excel的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05