使用axios调用时,无法请求到API

发布于 2022-09-07 22:23:31 字数 1340 浏览 64 评论 0

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]是什么情况下使用

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小嗲 2022-09-14 22:23:31

后台是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);

}
);`

不即不离 2022-09-14 22:23:31

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文