小伙伴們都知道,常用的http請求有兩種方式,即GET方法和POST方法,很多剛入門的童鞋難免都會有一個誤區,是不是GET是從伺服器上獲取數據,POST是向伺服器傳送數據? 我的理解是:不論是GET還是POST,都是向伺服器提交數據,並且請求之後都會從伺服器獲取數據,兩者的區別僅是傳送方式不同而已, ...
小伙伴們都知道,常用的http請求有兩種方式,即GET方法和POST方法,很多剛入門的童鞋難免都會有一個誤區,是不是GET是從伺服器上獲取數據,POST是向伺服器傳送數據?
我的理解是:不論是GET還是POST,都是向伺服器提交數據,並且請求之後都會從伺服器獲取數據,兩者的區別僅是傳送方式不同而已,GET通過地址欄傳輸,POST通過報文傳輸。對資源的增刪改查操作其實都可以通過get/post方法來實現,下麵就詳細介紹一下這兩種方法:
一、請求原理以及方式:
1、GET 請求
GET請求不存在請求實體部分,鍵值對參數放置在 URL 尾部,瀏覽器把form數據轉換成一個字串(name1=value1&name2=value2...),然後把這個字串追加到url後面,用?分割,載入這個新的url。因此請求頭不需要設置 Content-Type欄位。
非 ASCII 碼會自動進行編碼轉換,例如發送請求:www.lalalal.com?haha=哈哈 。
值得一提的是,GET 參數的編碼方式是無法人為干涉的,這導致了不同瀏覽器有不同的編碼方式,因此最穩妥的方案是人工預編碼,人工解碼,從而禁止瀏覽器編碼的干涉。
2、POST 請求
POST把提交的數據則放置在是HTTP包的包體中。Http Header里的Content-Type一般有好幾種方式,但是我自己接觸到的是以下兩種方式:
a) application/x-www-form-urlencoded:數據被編碼為名稱/值對。這是標準的編碼格式。瀏覽器的原生 form 表單,如果不設置 enctype 屬性,那麼最終就會以 application/x-www-form-urlencoded 方式提交數據。會將表單內的數據轉換拼接成 key-value 對(非 ASCII 碼進行編碼)
b) application/json:由於JSON 格式支持比鍵值對複雜得多的結構化數據,這一點現在越來越多的人把它作為請求頭,用來告訴服務端消息主體是序列化後的 JSON 字元串。本文就是重點介紹這種方式。
二、後端獲取參數的方式
對於後臺接受來自前臺的請求時,且Content-Type為application/json時,可以傳遞參數也可以不傳遞參數,但是多數情況下是需要有參數傳來的,所以,下麵就只介紹有參數傳過來的情形:
1、獲取GET參數 Get:([FromQuery] User user)
[fromQuery]是告訴模型綁定在解析的過程中從HttpContext中那一部分獲取信息。
2、獲取POST參數 Post:([(FromBody)] User user)
[FromBody] 是參數綁定的過程中,告訴框架該參數是使用配置過的格式化程式從Http Body 中解析。和get不同的是,在接受參數的時候必須要先建立一個實體類來接受參數,並且該實體類必須與前端的請求參數一模一樣。