WebApi介面傳參呼叫問題
原創地址點選開啟連結
一、get請求
對於取資料,我們使用最多的應該就是get請求了吧。下面通過幾個示例看看我們的get請求引數傳遞。
1、基礎型別引數
[csharp] view plain copy- [HttpGet]
- public string GetAllChargingData(int id, string name)
- {
- return
- }
- $.ajax({
- type: "get",
- url: "http://localhost:27221/api/Charging/GetAllChargingData"
- data: { id: 1, name: "Jim", bir: "1988-09-11"},
- success: function (data, status) {
- if
- $("#div_test").html(data);
- }
- }
- });
2、實體作為引數
如果我們在get請求時想將實體物件做引數直接傳遞到後臺,是否可行呢?我們來看看。
[csharp] view plain copy- public class TB_CHARGING
- {
- /// <summary>
- /// 主鍵Id
- /// </summary>
- public string ID { get; set; }
- /// <summary>
- /// 充電裝置名稱
- /// </summary>
- public string NAME { get; set; }
- /// <summary>
- /// 充電裝置描述
- /// </summary>
- public string DES { get; set; }
- /// <summary>
- /// 建立時間
- /// </summary>
- public DateTime CREATETIME { get; set; }
- }
- [HttpGet]
- public string GetByModel(TB_CHARGING oData)
- {
- return "ChargingData" + oData.ID;
- }
- $.ajax({
- type: "get",
- url: "http://localhost:27221/api/Charging/GetByModel",
- contentType: "application/json",
- data: { ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" },
- success: function (data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
測試結果: 在get請求時,我們直接將json物件當做實體傳遞後臺,後臺是接收不到的。這是為什麼呢?我們來看看對應的http請求
- <img src="http://images2015.cnblogs.com/blog/459756/201603/459756-20160331104121410-719598113.png" alt="" />
原來,get請求的時候,預設是將引數全部放到了url裡面直接以string的形式傳遞的,後臺自然接不到了。
原因分析:還記得有面試題問過get和post請求的區別嗎?其中有一個區別就是get請求的資料會附在URL之後(就是把資料放置在HTTP協議頭中),而post請求則是放在http協議包的包體中。
根據園友們的提議,Get請求的時候可以在引數裡面加上[FromUri]即可直接得到物件。還是貼上程式碼:
[javascript] view plain copy- var postdata = { ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" };
- $.ajax({
- type: "get",
- url: "http://localhost:27221/api/Charging/GetAllChargingData",
- data: postdata,
- success: function (data, status) { }
- });
- [HttpGet]
- public string GetAllChargingData([FromUri]TB_CHARGING obj)
- {
- return "ChargingData" + obj.ID;
- }
得到結果:
如果你不想使用[FromUri]這些在引數裡面加特性的這種“怪異”寫法,也可以採用先序列化,再在後臺反序列的方式。
[javascript] view plain copy- $.ajax({
- type: "get",
- url: "http://localhost:27221/api/Charging/GetByModel",
- contentType: "application/json",
- data: { strQuery: JSON.stringify({ ID: "1", NAME: "Jim", CREATETIME: "1988-09-11" }) },
- success: function (data, status) {
- if (status == "success") {
- $("#div_test").html(data);
- }
- }
- });
- [HttpGet]
- public string GetByModel(string strQuery)
- {
- TB_CHARGING oData = Newtonsoft.Json.JsonConvert.DeserializeObject<TB_CHARGING>(strQuery);
- return "ChargingData" + oData.ID;
- }
這樣在後臺得到我們序列化過的物件,再通過反序列化就能得到物件。
在url裡面我們可以看到它自動給物件加了一個編碼:
3、陣列作為引數
一般get請求不建議將陣列作為引數,因為我們知道get請求傳遞引數的大小是有限制的,最大1024位元組,數組裡面內容較多時,將其作為引數傳遞可能會發生引數超限丟失的情況。
4、“怪異”的get請求
為什麼會說get請求“怪異”呢?我們先來看看下面的兩種寫法對比。
(1)WebApi的方法名稱以get開頭
相關推薦
WebApi介面傳參呼叫問題
原創地址點選開啟連結 一、get請求 對於取資料,我們使用最多的應該就是get請求了吧。下面通過幾個示例看看我們的get請求引數傳遞。 1、基礎型別引數 [csharp] view plain copy
通過反射傳參呼叫視窗
直接呼叫 string strName = "MyOpsTools." + "stringFormName";//要呼叫窗體的 程式集.+窗體名稱 (要有.) string assemblyPath = "程式集名稱的長格式"; Form form = (Form)
介面傳參時,不寫欄位,這種格式http://localhost:9000/findData/1 取參
@GetMapping("/findData/{id}") public List<DetectionVo> findData(@PathVariable("id") String id){ //return userService.findData();
VUE介面傳參方式
傳遞引數有兩種方式: 由 taskList.vue 點選view按鈕 跳轉至taskviewIndex;1、push name+params;this.$router.push({name
介面傳參
@Override public void onDismiss(DialogInterface dialog) { super.onDismiss(dialog); if(mListe
java 通過儲存過程名字 獲取儲存過程的引數列表,然後自動傳參呼叫sp
實現思路:關鍵點在 通過儲存過程的名字獲取引數列表 資料庫選擇sql server 2012 查詢的指令碼是(注意要指定對應的資料庫,如:使用 use test 或者 test.sys.parameters test.dbo.sysobjects): select
vue-resource jsonp介面傳參-json傳參
很多vue前臺開發,希望以json的形式來傳遞引數,使用方法如下: //通過json傳參 var url="http://localhost/jsonparam"; var sendData={"configid":55 ,"config
如何呼叫http介面通過get()/post()方法傳參
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.
【轉】C#進階系列——WebApi 介面引數不再困惑:傳參詳解
正文 前言:還記得剛使用WebApi那會兒,被它的傳參機制折騰了好久,查閱了半天資料。如今,使用WebApi也有段時間了,今天就記錄下API介面傳參的一些方式方法,算是一個筆記,也希望能幫初學者少走彎路。本篇針對初初使用WebApi的同學們,比較基礎,有興趣的且看看。 WebApi系列文章
HttpUrlconnection POST提交 用於介面呼叫傳參
package com.jr.demo; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.
WebApi 介面引數不再困惑:傳參詳解
get和post請求的區別:1、GET使用URL或者cookie傳參,而POST 將資料放在body中2、GET的URL會有長度的限制,一般為1024,而POST的資料可以非常大3、Post比GET更安全,因為資料在位址列不可見4、GET用於獲取資料,而Post用於修改資料
C#進階系列——WebApi 介面引數不再困惑:傳參詳解
前言:還記得剛使用WebApi那會兒,被它的傳參機制折騰了好久,查閱了半天資料。如今,使用WebApi也有段時間了,今天就記錄下API介面傳參的一些方式方法,算是一個筆記,也希望能幫初學者少走彎路。本篇針對初初使用WebApi的同學們,比較基礎,有興趣的且看看。 WebApi系列文章 本篇打算通過ge
Angular 呼叫 WebApi 傳參
WebApi的CURD方法記錄以及呼叫傳參 // GET api/test public IEnumerable<string> Get() { return new string[] { "
WebApi 接口參數不再困惑:傳參詳解
gin ebr 字符流 sts ash nbsp 之前 ret 傳遞對象 轉自:http://www.cnblogs.com/landeanfen/p/5337072.html 閱讀目錄 一、get請求 1、基礎類型參數 2、實體作為參數 3、數組作為
C#進階系列——WebApi 接口參數不再困惑:傳參詳解
pub 博客 bapi write ids 簡單 指定 數組 這也 https://www.cnblogs.com/landeanfen/p/5337072.html 閱讀目錄 一、get請求 1、基礎類型參數 2、實體作為參數 3、數組作為參數 4
微信小程式——父子元件傳參以及方法的呼叫
父元件向子元件傳參 A元件為父元件,B元件為子元件,以下是A元件向B元件傳參 在A元件中引入B元件(父元件引入子元件) 在A元件的json中寫入(父元件): { "component": true, "usingComponents": { "com
MySql儲存過程中傳參和不傳參以及java中呼叫程式碼
資料庫表結構 1.mysql不傳參寫儲存過程 create procedure product() -- product為儲存過程名稱 begin select * from book; end 呼叫此儲存過程為 CALL product
C++傳參構造的優化和討論構造拷貝構造N中呼叫情況
C++對傳參和傳返回值時建構函式的優化處理 1.c++形式引數型別和返回值為引用時,會把實參或者返回值引用自動賦給形式引數(返回值)。 2.c++返回值賦值和返回值使用一般會進行編譯器的優化。 3.c++函式引數(或者返回值)賦值時,如果其型別是類並且對應
struts2動態方法呼叫與j2ee互動傳參
動態方法呼叫: (action程式碼) package com.zking.web; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ModelDriven; import
WebApi中Post請求傳參時後端的接收方式
1.單引數 [FromBody]+變數方式(不推薦):如public string PostUser([FromBody] string user_id){} 由於我們的前端習慣用key/value的方式進行請求,而此法要求key為空,有點不三不四,程式碼不規範,故此不推薦。總不能都是你寫的