1. 程式人生 > 其它 >webapi中通過POST請求傳參的問題

webapi中通過POST請求傳參的問題

使用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整體資料。如: