C# WebApi Get請求方式傳遞實體參數(shù)的方法示例
前言
我又搞回篤NET啦!java之路真是命運多舛,好事多磨。不過,也許我已經(jīng)進(jìn)入無招勝有招,博取眾家之長、融會貫通的地步了。
對于WebApi,今天又有了一些新的了解。
話說,Get請求方式,參數(shù)會附在Url后面,稱為QueryString,傳遞給服務(wù)器;而POST方式,則將參數(shù)放在消息體內(nèi)。采用QueryString的話,簡單,方便,但只適合參數(shù)比較少的情況;但有的時候,需要傳遞比較多、比較復(fù)雜的參數(shù),比如,組合條件查詢。
組合條件查詢,條件會很多,通常會用一個實體類來封裝,傳遞給服務(wù)器。用post方式肯定是可以的,駕輕就熟。問題是,RESTful原則,是將一切抽象成資源,對資源的不同請求方式,代表了對資源的不同操作。按道理,post難道不是代表插入嗎?為啥查詢也要用到post?
GET方式下,也可以將參數(shù)提交給服務(wù)器?但查來查去,ajax好像可以;但服務(wù)器端,使用WebClient就沒有找到現(xiàn)成的例子,不知道該咋整。只好用最原始的方法,將實體類轉(zhuǎn)化成QueryString,附在地址后面了。有兩個問題:
1、實體類如何轉(zhuǎn)換成QueryString這種鍵值對格式?
2、服務(wù)器端如何提?。?/p>
一、實體類如何轉(zhuǎn)換成QueryString這種鍵值對格式?
叫鍵值對可能不夠?qū)I(yè),叫NameValueCollection?
很遺憾,也沒找到啥現(xiàn)成的例子。
最后祭出反射,來拼裝QueryString
二、服務(wù)器端如何提取QueryString里參數(shù),自動變成一個實體類?
參數(shù)前面標(biāo)注[FromUri]特性
上代碼。
實體類:
namespace BaseLT.Core.Contract { public class Request { public Request(); public int Top { set; } public int PageSize { get; set; } public int PageIndex { get; set; } public string OrderBy { get; set; } public int SortState { get; set; } public bool CompareObject<T>(T obj1, T obj2); public void ExtjsInit(); } }
WebApi服務(wù)器端:
public class TankController : ApiController { [HttpGet] [Route("api/tank/matters/public/{id=0}")] public IEnumerable<Matter> Get(int id,[FromUri]Request req) { return do sth; } }
客戶端:
[TestMethod] public void TestTankApi() { string url = "http://localhost/ybjzuser.api/api/tank/matters/public/"; url += getQueryString(new Request() { PageIndex = 1, PageSize = 100 }); string re; using (WebClient webClient = new WebClient()) { webClient.Encoding = Encoding.GetEncoding("utf-8"); re = webClient.DownloadString(url); } Assert.AreNotEqual(null, re); Console.WriteLine(re); } static string getQueryString(Request req) { StringBuilder query = new StringBuilder("?"); PropertyInfo[] propertys = req.GetType().GetProperties(); foreach (PropertyInfo pi in propertys) { if (pi.CanRead) { query.Append($@"{pi.Name}={pi.GetValue(req)}&"); } } return query.ToString(); }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對我們的支持。
欄 目:C#教程
本文標(biāo)題:C# WebApi Get請求方式傳遞實體參數(shù)的方法示例
本文地址:http://mengdiqiu.com.cn/a1/C_jiaocheng/4791.html
您可能感興趣的文章
- 01-10C#進(jìn)階系列 WebApi身份認(rèn)證解決方案推薦:Basic基礎(chǔ)認(rèn)證
- 01-10在WinForm中發(fā)送HTTP請求的實現(xiàn)方法
- 01-10C#模擬http 發(fā)送post或get請求的簡單實例
- 01-10BootStrap mvcpager分頁樣式(get請求,刷新頁面)
- 01-10C#處理和對接HTTP接口請求的方法
- 01-10C# Windows API應(yīng)用之基于GetDesktopWindow獲得桌面所有窗口句柄的方法
- 01-10使用C#發(fā)送Http請求實現(xiàn)模擬登陸實例
- 01-10C#使用GET、POST請求獲取結(jié)果
- 01-10SuperSocket入門--Telnet服務(wù)器和客戶端請求處理
- 01-10C#實現(xiàn)的UDP收發(fā)請求工具類實例


閱讀排行
本欄相關(guān)
- 01-10C#通過反射獲取當(dāng)前工程中所有窗體并
- 01-10關(guān)于ASP網(wǎng)頁無法打開的解決方案
- 01-10WinForm限制窗體不能移到屏幕外的方法
- 01-10WinForm繪制圓角的方法
- 01-10C#實現(xiàn)txt定位指定行完整實例
- 01-10WinForm實現(xiàn)仿視頻 器左下角滾動新
- 01-10C#停止線程的方法
- 01-10C#實現(xiàn)清空回收站的方法
- 01-10C#通過重寫Panel改變邊框顏色與寬度的
- 01-10C#實現(xiàn)讀取注冊表監(jiān)控當(dāng)前操作系統(tǒng)已
隨機(jī)閱讀
- 08-05織夢dedecms什么時候用欄目交叉功能?
- 04-02jquery與jsp,用jquery
- 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
- 01-10delphi制作wav文件的方法
- 01-10使用C語言求解撲克牌的順子及n個骰子
- 01-10C#中split用法實例總結(jié)
- 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
- 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
- 01-11ajax實現(xiàn)頁面的局部加載
- 08-05DEDE織夢data目錄下的sessions文件夾有什