鍍金池/ 問答/C#  HTML/ 使用axios調(diào)用時,無法請求到API

使用axios調(diào)用時,無法請求到API

dotnet core webapi 代碼如下

        [HttpGet]
        [EnableCors("CMSCorsConfig")]
        public ActionResult<IEnumerable<string>> Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet("{id}")]
        [EnableCors("CMSCorsConfig")]
        public ActionResult<string> Get(int id)
        {
            return "value";
        }

        // POST api/values
        [HttpPost]
        [EnableCors("CMSCorsConfig")]
        public void Post([FromBody] string value)
        {
            //throw new Exception("HELLO FROM POST");
        }

axios 請求代碼如下:

export function write (title, name) {
  return axios({
    url: '/values/',
    method: 'post',
    data: { title, name }
  })
}

錯誤如下:
圖片描述

我將axios 調(diào)用另一個API時成功,

export function write (title, name) {
  return axios({
    url: '/values/',
    method: 'get'    
  })
}

我用如下改寫后可以成功,但無法得到值

        [HttpPost]
        [EnableCors("CMSCorsConfig")]
        public string Post( string title,string name)
        {
            return title;
        }

改成這樣可以調(diào)用成功,但返回永遠(yuǎn)是空值

該如何調(diào)整,另外[FromBody]是什么情況下使用

回答
編輯回答
孤島

后臺是form表單接收數(shù)據(jù)嗎,應(yīng)為你用get請求的時候是url傳輸,后臺接收到的數(shù)據(jù)格式是類似'id=1&from=home'這樣的格式,但是你用post傳輸?shù)脑挃?shù)據(jù)格式是鍵值對:{ id: 1, from: "home" },后臺接收不到吧。

如果后臺數(shù)form表單接收的話,在axios攔截器里面使用'qs'模塊`import axios from 'axios';
import { getToken } from './auth'
// import 'url-search-params-polyfill'
import qs from 'qs'

axios.defaults.timeout = 5000
axios.defaults.baseURL = process.env.BASE_API

//http request 攔截器
axios.interceptors.request.use(
config => {

const token = getToken() // 注意使用的時候需要引入cookie方法,推薦js-cookie
// config.data = new URLSearchParams(config.data) // 把{ id: 1, from: "home" }格式的參數(shù)轉(zhuǎn)換成'id=1&from=home'格式的參數(shù)傳給后臺,坑我好久,后臺一直接受不到參數(shù)就是這個原因
config.data = qs.stringify(config.data)
console.log('奇怪')
config.headers = {
  'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8',
  'client_type': '20',
  'api_version': '1.0.0000',
  'token': token || ''
}
return config;

},
error => {

return Promise.reject(err);

}
);`

2017年6月21日 21:36
編輯回答
舊酒館

如果是單個string,client要寫成 {“”: value}
如果是多個字段,服務(wù)端需要封裝成object,再加上frombody。
按照你的寫法是fromuri取得title等。

bad request問題你可以在vs調(diào)試輸出具體的error看一下就知道了。

2017年3月1日 06:54