我有一个接受 GET
的请求 body
api,以便根据正文中的内容进行过滤。如下图,逻辑是通过<cluster_id>
获取特定集群的任务。 Django
用于后端。我正在将其与 React
集成。
import requests
url = "http://localhost:8000/v1/tasks"
payload={'cluster': <cluster_id>}
headers = {
'Authorization': 'Token <user_token>'
}
response = requests.request("GET", url, headers=headers, data=payload)
print(response.text)
我正在尝试在前端使用 fetch 进行同样的操作,尽管我清楚地理解不建议在 GET 请求中使用正文。
async componentDidMount() {
const options = {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8',
'Authorization': 'Token ' + localStorage.getItem('token')
},
body: JSON.stringify({
cluster: this.state.cluster_id
})
}
const response = await fetch(`http://localhost:8000/v1/tasks`, options)
const json = await response.json()
return json
}
我收到一个错误,限制在 GET 请求中使用正文。如何在不修改其余 api 结构的情况下在 fetch 中应用逻辑?是否有可能在 fetch GET 请求中使用 body 并检索数据?
答案 0 :(得分:0)
GET 不支持请求中的正文。就算通过了,也会被忽略。
您可以使用 URLSearchParams
将您的参数转换为要与网址一起发送的查询参数。
new URLSearchParams(params).toString()
const params = { cluster: this.state.cluster_id };
const options = {
method: 'GET',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=UTF-8',
'Authorization': 'Token ' + localStorage.getItem('token')
}
};
const url = `http://localhost:8000/v1/tasks?${new URLSearchParams(params)}`
const response = await fetch(url, options)