我有以下方法来删除webhook订阅:
const deleteSubscriptions = async (subscription: number) => {
const url: string = `${CONFIG.STRAVA_API_BASE_URL}/push_subscriptions/${subscription}`;
const params = {
client_id: CONFIG.STRAVA_CLIENT_ID,
client_secret: CONFIG.STRAVA_CLIENT_SECRET
};
try {
const res = await axios.delete(url, {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
params: params
});
} catch (err: any) {
console.log(err);
}
};
这个方法工作得很好,但是如果我尝试用Fetch做同样的事情,我会收到一个错误。提取方法:
const deleteSubscriptions = async (subscription: number) =>{
const url: string = `${CONFIG.STRAVA_API_BASE_URL}/push_subscriptions/${subscription}`
const body = JSON.stringify({
client_id: CONFIG.STRAVA_CLIENT_ID,
client_secret: CONFIG.STRAVA_CLIENT_SECRET,
})
try{
const res = await fetch(url, {
method: "DELETE",
headers:{
"Content-Type": "application/x-www-form-urlencoded"
},
body: body
})
let data = await res.json();
}catch (err: any){
console.log(err)
}
}
这是我在使用fetch方法时收到的错误:Console Output
1条答案
按热度按时间j5fpnvbx1#
您的第一个请求是将您的数据作为URL查询参数发送。您的第二个请求是在请求正文中发送您的数据。
第一个是正确的方法,因为URL本身应该代表您要删除的资源的URL,这显然是您正在使用的主机的工作原理。
我不认为GET应该有身体,就像GET不应该有身体一样。
而且,这两个请求都不应该设置Content-Type头,因为不应该有正文,Content-Type应用于正文。
因此,对于
fetch()
,您需要将参数放入URL中。虽然axios()
可以为你做这件事,但我没有看到fetch()
接口中有任何地方可以为你做这件事,所以你可能需要在调用fetch()
之前自己用查询参数构造URL。