我有一个简单的api端点,用于共享需要使用承载令牌进行身份验证的帖子/api/v1/posts/{id}/share
。
我尝试发送如下所示的POST请求,并且其响应为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
答案 0 :(得分:1)
此问题的根本原因是:axios.post
和axios.get
具有不同的语法-第二个参数在axios.get
中表示“ config”,但在{{1中表示“ data” }}。这就是为什么它可以在GET中工作但在POST中失败的原因。
根据axios document,这2种语法为:
axios.get(URL [,config])
axios.post(URL [,data [,config]])
因此,当您使用代码发送HTTP POST请求时:
axios.post
发送请求时,HTTP 正文为axios.post(`/api/v1/posts/${id}/share`,
{
"headers": {
...
},
});
-未配置请求标头。
要使其与{"header":{...}}
一起使用,应将axios.post
配置对象作为第三个参数传递。如:
headers
答案 1 :(得分:0)
所以我通过使用不同的语法解决了这个问题
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);
老实说,我无法说出发生了什么变化,但是在这里,您可以去看看看到这个的任何人。