webApi中參數傳遞前端
一:無參數的get方法;web
前端: ajax
function GetNoParam() { //爲了統一:咱們都採用$.ajax({}) 方法; $.ajax({ url: '/api/User/GetNoParam', type: 'get', dataType: 'application/json', //application/xml webapi 返回的數據類型,客戶端請求時添加在請求頭中 //當沒法轉換成客戶想要的數據時,將報錯; success: function (data) { alert(data); $.each(data, function (index, item) { alert(item["Name"]); }) } }); }
後端:json
public List<User> GetNoParam() { var userList = new List<User> { new User{Id=1,Name="Jack"}, new User{Id=2,Name="Frank"} }; return userList; }
二:get+一個參數後端
前端:api
//經過get傳遞一個參數的方法; function GetByOneParam() { $.ajax({ url: '/api/User/GetByOneParam', type: 'get', data:{"Name":"Jack"}, dataType: 'json', success: function (data) { var value = data; } }); }
後端:app
public List<User> GetByOneParam(string Name) { //這裏咱們傳遞一個參數: var userList = new List<User> { new User{Id=1,Name="Jack"}, new User{Id=2,Name="Frank"} }; var query = (from u in userList where u.Name == Name select u ).ToList(); return query; }
三:get+兩個參數或以上;post
前端:編碼
function GetByTwoParam() { $.ajax({ url: '/api/User/GetByOneParam', type: 'get', data:{"Name":"Jack","Id":1}, dataType: 'json', success: function (data) { var value = data; } }); }
後端:url
public List<User> GetByTwoParam(string Name,int Id) { //這裏咱們傳遞一個參數: var userList = new List<User> { new User{Id=1,Name="Jack"}, new User{Id=2,Name="Frank"} }; var query = (from u in userList where u.Name == Name && u.Id==Id select u ).ToList(); return query; }
四:POST無參數返回數據值
前端:
//經過post的方法來獲取數據; function PostNoParam() { $.ajax({ url: '/api/User/PostNoParam', type: 'Post',//post方式 dataType: 'json', success: function (data) { var value = data; } }); }
後端:
public List<User> PostNoParam() { var userList = new List<User> { new User{Id=1,Name="Jack"}, new User{Id=2,Name="Frank"} }; return userList; }
五:post+一個參數(當心這裏有陷阱)
前端:
function PostByOneParam() { $.ajax({ url: '/api/User/PostByOneParam', type: 'Post',//post方式 data:{"":"Jack"}, //注意這裏的key值是空的 dataType: 'json', success: function (data) { var value = data; } }); }
後端:
//注意這裏的關鍵是添加一個:FromBody // to force web api to read simple type from the request body // add [FromBody] attribute to the para //[FromBody] 就告訴Web API 要從post請求體重去獲取參數的值。 //Web API 的模型綁定器但願找到 [FromBody] 並非咱們常見的 key=value 的鍵名的值,也就是說, 不是 key=value ,而是 =value 。 //在前端key爲空值 //還有一個特色:[FromBody] 修飾的參數只能有一個。咱們須要對傳遞的多個參數進行封裝才行。 public List<User> PostByOneParam([FromBody]string Name) { var userList = new List<User> { new User{Id=1,Name="Jack"}, new User{Id=2,Name="Frank"} }; var query = ( from u in userList where u.Name == Name select u ).ToList(); return query; }
六:POST 提交多個參數;
前端:
//組合多個參數 function PostByMoreParam() { //或者這種方式也能夠的額 var data = { Name: "jack", Id: 1 }; $.ajax({ url: '/api/User/PostByMoreParam', type: 'Post',//post方式 data: data, //這樣傳遞對象 後臺是可以獲取到值滴呀 dataType: 'json', success: function (data) { var value = data; } }); } //或則這樣寫 function PostByMoreParam1() { var data = { Name: "jack", Id: 1 }; var value = JSON.stringify(data); //使用JSON.stringify轉化一下; //傳遞的數據格式是json字符串 $.ajax({ url: '/api/User/PostByMoreParam', type: 'Post',//post方式 data: value, dataType: 'json', contentType: 'application/json', //若是你使用了 JSON.stringify將對象轉化成了字符串,那麼這裏就要添加這個; success: function (data) { var value = data; } }); //application/x-www-form-urlencoded 表示的是:窗體數據被編碼爲名稱/值對。 //並非json格式對於的 application/json }
後端:
public List<User> PostByMoreParam(User user) //這裏是實體對象滴呀 { var userList = new List<User> { new User{Id=1,Name="Jack"}, new User{Id=2,Name="Frank"} }; var query = (from u in userList where u.Name == user.Name && u.Id == user.Id select u ).ToList(); return query; }
7.傳遞多個不一樣對象的Post請求
前臺:
function PostMoreObj() { var stu = { Name: "jack", Id: 1 }; var course = { Id: 1, CourseName: "語文", SId: 1 }; //嘗試直接這樣傳遞看看得得行滴呀; $.ajax({ url: '/api/User/PostMoreObj', type: 'Post',//post方式 data: { "user": stu, "course": course }, dataType: 'json', success: function (data) { alert(typeof(data)); var value = data; } }); }
後臺:
//有時候咱們還會遇到須要傳遞多個不一樣對象參數的狀況, //對於這種特殊的狀況在 Json.Net 中爲咱們提供了一個 名爲 JObject 的通用對象容器 public bool PostMoreObj(Newtonsoft.Json.Linq.JObject jData) { dynamic json = jData; Newtonsoft.Json.Linq.JObject juser = json.user; Newtonsoft.Json.Linq.JObject jcourse = json.course; var stu = juser.ToObject<User>(); var course = jcourse.ToObject<CourseInfo>(); //而後就轉化成了咱們想要的數據滴呀; return true; }
不過在新的公司裏面,採用的是代理的方式,因此這些方法可能暫時用不到(是否是以爲很高端,代理哦~)