日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

ASP.NET WebAPI Get和Post 传参总结

發布時間:2024/4/13 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ASP.NET WebAPI Get和Post 传参总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里我使用Jquery 來發起異步請求實現數據調用。

  繼續使用上一文章中的示例,添加一個index.html頁面,添加對jquery的引用。

?

一、無參數Get請求

  一般的get請求我們可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 來實現:

  請求的后臺Action方法仍為上篇文章中的GetUser() :

  也可以用$.ajax({type:"get"}) 方式,正確的獲得了返回數據:

?

二、傳遞一個參數的Get請求

  通常我們需要傳遞參數只需要指定ajax方法的data屬性即可:?data:{"name":"趙大寶"}?

  后臺正確的返回數據:

?

三、傳遞兩個或多個參數的Get請求

  按照上面的方法,對于多個參數我們可以很容易就寫出來:?data:{"name":"趙大寶","age":12}

?  后臺正確的返回數據:

四、無參數的Post請求

  我們可以使用$.post() 或$.ajax({type:"post"}) 來發起post請求:

  后臺正確的返回了數據:

五、傳遞一個參數的Post請求:

  首先這里需要提醒大家一下,我們在修改完后臺代碼后,如果沒有重新生成項目,那么在請求時就會報錯:“未找到與請求***匹配的HTTP資源” :

  所以,我們只要我們修改了后臺代碼,就一定要重新生成一下:

?

  不過,當我們重新生成項目,再次發送請求,看到的仍然是404錯誤,再次檢查一番代碼,也沒有發現是哪里的問題。

  事實上,ASP.NET Web API能夠正確的識別我們的UserController控制器處理Post /api/user ,但卻不能找到一個可以接受的方法來處理請求。

也就是說,Web API接收到的請求能夠找到User控制器,但在該控制器中找不到名稱為Def 的這個Action。

那我們要怎么來解決呢?

通過搜索MSDN上Web API官網中的說明,我們可以找到下面的一段介紹:

在Action 方法中我們需要使用 [FromBody] 屬性標簽來標明屬性

  修改后,再次發送請求,我們可以看到,Status Code 為200,請求發送成功。

  可以看到,在post請求中,方法的參數必須要用 [FromBody] 屬性來修飾才可以, [FromBody] 就告訴Web API 要從post請求體重去獲取參數的值。

但讓我們詫異的卻是,后臺返回的數據中name的值為空。

  通過調試,我們可以看到,后臺Action 中接收到的name值為null。

?

  通過上面的測試我就也能夠猜測到,Web API 要求請求傳遞的 [FromBody] 參數,肯定是有一個特定的格式,才能被正確的獲取到。而這種特定的格式并不是我們常見的 key=value 的鍵值對形式。Web API 的模型綁定器希望找到 [FromBody] 里沒有鍵名的值,也就是說, 不是 key=value ,而是 =value 。

現在,咱們把data中的key設置為空,然后再次發送請求:

  測試可見,后臺正確的接收到了數據:

?六、傳遞兩個參數的Post請求

  按理說,一個參數的請求實現了,那么傳遞兩個或者多個參數也就很順利了,對于兩個參數的后臺接收方法,我們可能會這樣來寫:

但事實證明,這樣是錯誤的。

?

那到底兩個或者多個參數我們要怎樣來定義呢?

再次查看官網中的介紹,我們了解到:

  也就是說,[FromBody] 修飾的參數只能有一個。我們需要對傳遞的多個參數進行封裝才行。

這里,我們可以將 Name和 Age 封裝成一個Student 類:

  前臺頁面再次發送請求:

  Status Code為200,請求成功,并正確獲取到后臺返回的數據:

?

  這里,我們通過上面圖片中的請求頭數據可以看到,Form Data 的格式是 key=value&key=value 這種表單數據格式?Name=%E8%B5%B5%E5%A4%A7%E5%AE%9D&Age=13 ,我們平時使用的比較多的一般為json格式。 這里,我們使用?JSON.stringify() 來序列化數據。

再次發送請求:

  可以看到,From Data 中數據的格式為json字符串,Status Code為200,請求正確,但結果又出錯了,后臺又沒有接收到數據參數:

那么問題到底出在哪呢?

  我們再次查看上圖中請求頭內容,注意到,雖然我們傳遞的數據格式是json字符串,但請求頭中的Content-type 卻為?

application/x-www-form-urlencoded ,并不是json格式對于的 application/json 。 而編碼格式?application/x-www-form-urlencoded 表示的是:窗體數據被編碼為名稱/值對。?

  這里,也就是我想要說的一個注意點。平時我們在使用json數據的時候,很容易就忘記了 要指定 Content-type 為 "application/json" ,所以就容易導致很多“想不到”的錯誤。

所以,我們在 $.ajax() 中指定 Content-type :

  這次,后臺正確的接收并返回了數據:

?

七、傳遞多個參數的Post請求

  有了上面的經驗,傳遞多個參數的post請求我們就很容易能寫出來了:

后臺接收并返回數據:

?

八、傳遞多個不同對象的Post請求

  有時候我們還會遇到需要傳遞多個不同對象參數的情況,對于這種特殊的情況在 Json.Net 中為我們提供了一個 名為 JObject 的通用對象容器,我們可以通過 .對象名 的方式來動態的遍歷參數里面的屬性的值,然后動態的轉換和json類型中對應的屬性類型。

比如:

后臺調試,通過dynamic 動態轉換獲取屬性的值:

后臺正確的返回了數據:

?

九、獲取不同類型的數據

  一般我們獲取到后臺返回的數據格式類型為 json格式,我們也可以指定 請求頭中的輸出類型來獲得不同的返回類型數據:

指定輸出類型為xml格式:

指定輸出類型為 json格式:

?

  基本到這里,這篇文章的主要內容也就算說完了,其中的重點還是 Post請求中對于參數的處理是需要重點注意的。

  上面我們在測試的過程中,都是通過自己創建的Controller控制器類來對參數進行接收處理,可能有人會問,我們這么寫到底是否符合規范呢,Web API中默認是怎么來處理的呢? 這里,Visual Studio 中也為我們自帶了 Web API控制器類:

我們可以添加新建項選擇 Web API控制器類 即可:

  這里我們可以看到,默認創建的Controller控制器類中,對于Post請求的Action方法都自帶了 [FromBody] 屬性。 現在不用我說,你也已經知道為什么 它會為參數默認帶一個 [FromBody]屬性吧!

?

轉載:http://www.cnblogs.com/babycool/p/3922738.html

轉載于:https://www.cnblogs.com/lkd3063601/p/4798466.html

總結

以上是生活随笔為你收集整理的ASP.NET WebAPI Get和Post 传参总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。