webapi中通過POST請求傳參的問題
阿新 • • 發佈:2022-05-07
使用axios向後端webapi伺服器發請求,後端webapi除了要在控制器上ApiController特性外,在action裡宣告的引數型別應該用物件來接收,否則是收不到值的。因為axios傳過去的是json物件格式。
主要是axios傳送的資料是Request Payload資料。而jquery傳送的是Form Data型別。是表單格式。所以api可以宣告變數一個個接收(但是控制器不能加ApiController)。
在以前都是用到表單格式進行傳送post請求的。
如:
如:
1. 前端通過axios傳送資料
axios.post( "http://localhost:5000/Login", {userName:this.userName, userNo:this.userNo, userPassword:this.password}).then(response=>{ console.log(response); });
檢視傳送的資料
後端拿不到值:
2.前端通過Jquery的$.ajax傳送資料
$.ajax({ type:"post", url:"http://localhost:5000/Login", data: {userName:this.userName, userNo:this.userNo, userPassword:this.password} });
檢視傳送的資料
但是後臺還是收不到值
解決方式:註釋掉ApiController
然後再發送請求,即可看到有資料。
但是,如果是用axios傳送即使註釋掉ApiController還是收不到資料。
通過檢視它們向伺服器傳送的資料即可看到,它們的資料格式不相同。一個是JSON物件格式,一個是表單格式。
但是,jquery傳送的資料格式也能通過物件接收,前提是後端註釋掉ApiController。
public string Insert(Users users) { return _userBLL.AddUser(users); }
3.解決用axios傳送post請求接收不到資料
①後端加上ApiController,然後用物件接收即可收到資料。
因為ApiController特性底層會幫我們推動收到的請求裡的資料的型別。
②在net3.1以前,沒有ApiController特性,就在整體結果前加[FromBody]
,表示獲取請求裡的body整體資料。如: