我有一个简单的api端点,用于共享posts /api/v1/posts/{id}/share
,它需要使用承载令牌进行身份验证。
我试图像下面这样发送一个帖子请求,它的响应是401
axios.post(`/api/v1/posts/${id}/share`,
{
"headers": {
"Authorization":"Bearer "+token,
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json"
},
});
只有当我将其更改为接受后端的GET并将代码更改为此时,它才起作用。
axios.get(`/api/v1/posts/${id}/share`,
{
"headers": {
"Authorization":"Bearer "+token,
"Content-Type": "application/x-www-form-urlencoded",
"Accept": "application/json"
},
});
我用http客户端测试了我的端点(失眠),所以问题似乎确实存在于axios中。为什么会发生这种情况,我该如何解决?
我使用的服务器是apache,后端框架是laravel
发布于 2019-07-01 03:13:27
造成这个问题的根本原因是:axios.post
和axios.get
有不同的语法--第二个参数在axios.get
中表示"config“,而在axios.post
中表示"data”。这就是为什么它在GET中工作但在POST中失败的原因。
根据axios 文档,这2种语法是:
axios.get(url,config) axios.post(url[,data,config])
因此,当您用代码发送HTTP请求时:
axios.post(`/api/v1/posts/${id}/share`,
{
"headers": {
...
},
});
请求被发送,HTTP body作为{"header":{...}}
--没有配置请求头。
为了使它与axios.post
一起工作,应该将headers
配置对象作为第三个参数传递。例如:
axios.post(`/api/v1/posts/${id}/share`,
{}, // or whatever data you want to send.
{
"headers": {
...
},
});
发布于 2019-06-30 21:51:34
所以我用不同的语法解决了这个问题
const options = {
method:"post",
"headers": {
"Authorization":token,
"Content-Type": 'application/x-www-form-urlencoded',
"Accept": "application/json"
},
url:`/api/v1/posts/${id}/share`
};
axios(options);
老实说,我说不出是什么改变了,但这是对任何看到这个的人来说的。
https://stackoverflow.com/questions/56819691
复制相似问题