使用axios调用时,无法请求到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 调用另一个API时成功,

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

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

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

改成这样可以调用成功,但返回永远是空值

该如何调整,另外[FromBody]是什么情况下使用

阅读 4.5k
2 个回答

后台是form表单接收数据吗,应为你用get请求的时候是url传输,后台接收到的数据格式是类似'id=1&from=home'这样的格式,但是你用post传输的话数据格式是键值对:{ id: 1, from: "home" },后台接收不到吧。

如果后台数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" }格式的参数转换成'id=1&from=home'格式的参数传给后台,坑我好久,后台一直接受不到参数就是这个原因
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);

}
);`

如果是单个string,client要写成 {“”: value}
如果是多个字段,服务端需要封装成object,再加上frombody。
按照你的写法是fromuri取得title等。

bad request问题你可以在vs调试输出具体的error看一下就知道了。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题