将带有简单字符串的请求作为请求正文
Put request with simple string as request body
当我从我的浏览器执行以下代码时,服务器给我 400 并抱怨请求正文丢失。有人知道我如何传递一个简单的字符串并将其作为请求正文发送吗?
let content = 'Hello world'
axios.put(url, content).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
如果我将内容包装在 [] 中,它就会通过。但是随后服务器将其作为以 [ 开头并以 ] 结尾的字符串接收。这看起来很奇怪。
折腾后发现下面的方法可行
let req = {
url,
method: 'PUT',
data: content
}
axios(req).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
但是第一个不应该也有效吗?
axios.put(url,{body},{headers:{}})
示例:
const body = {title: "what!"}
const api = {
apikey: "safhjsdflajksdfh",
Authorization: "Basic bwejdkfhasjk"
}
axios.put('https://api.xxx.net/xx', body, {headers: api})
这对我有用(从节点 js repl 调用的代码):
const axios = require("axios");
axios
.put(
"http://localhost:4000/api/token",
"mytoken",
{headers: {"Content-Type": "text/plain"}}
)
.then(r => console.log(r.status))
.catch(e => console.log(e));
日志:200
这是我的请求处理程序(我正在使用 restify):
function handleToken(req, res) {
if(typeof req.body === "string" && req.body.length > 3) {
res.send(200);
} else {
res.send(400);
}
}
Content-Type header 这里很重要。
您是否尝试过以下方法:
axios.post('/save', { firstName: 'Marlon', lastName: 'Bernardes' })
.then(function(response){
console.log('saved successfully')
});
参考:http://codeheaven.io/how-to-use-axios-as-your-http-client/
这对我有用。
let content = 'Hello world';
static apicall(content) {
return axios({
url: `url`,
method: "put",
data: content
});
}
apicall()
.then((response) => {
console.log("success",response.data)
}
.error( () => console.log('error'));
这对我有用:
export function modalSave(name,id){
console.log('modalChanges action ' + name+id);
return {
type: 'EDIT',
payload: new Promise((resolve, reject) => {
const value = {
Name: name,
ID: id,
}
axios({
method: 'put',
url: 'http://localhost:53203/api/values',
data: value,
config: { headers: {'Content-Type': 'multipart/form-data' }}
})
.then(function (response) {
if (response.status === 200) {
console.log("Update Success");
resolve();
}
})
.catch(function (response) {
console.log(response);
resolve();
});
})
};
}
我在发送纯文本时遇到问题,发现我需要用双引号将正文的值括起来:
const request = axios.put(url, "\"" + values.guid + "\"", {
headers: {
"Accept": "application/json",
"Content-type": "application/json",
"Authorization": "Bearer " + sessionStorage.getItem('jwt')
}
})
我的 webapi 服务器方法签名是这样的:
public IActionResult UpdateModelGuid([FromRoute] string guid, [FromBody] string newGuid)
我通过覆盖默认的 Content-Type 解决了这个问题:
const config = { headers: {'Content-Type': 'application/json'} };
axios.put(url, content, config).then(response => {
...
});
根据我的经验,字符串默认 Conent-Type
为 application/x-www-form-urlencoded
,对象(包括数组)默认为 application/json
。您的服务器可能需要 JSON.
只需将headers'Content-Type': 'application/json'
和发送的数据放入bodyJSON.stringify(string)
另一个简单的解决方案是用大括号将给定代码中的内容变量括起来,如下所示:
let content = 'Hello world'
axios.put(url, {content}).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
警告:但这不会将其作为字符串发送;它会将它包装在一个 json 主体中,如下所示:{content: "Hello world"}
当我从我的浏览器执行以下代码时,服务器给我 400 并抱怨请求正文丢失。有人知道我如何传递一个简单的字符串并将其作为请求正文发送吗?
let content = 'Hello world'
axios.put(url, content).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
如果我将内容包装在 [] 中,它就会通过。但是随后服务器将其作为以 [ 开头并以 ] 结尾的字符串接收。这看起来很奇怪。
折腾后发现下面的方法可行
let req = {
url,
method: 'PUT',
data: content
}
axios(req).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
但是第一个不应该也有效吗?
axios.put(url,{body},{headers:{}})
示例:
const body = {title: "what!"}
const api = {
apikey: "safhjsdflajksdfh",
Authorization: "Basic bwejdkfhasjk"
}
axios.put('https://api.xxx.net/xx', body, {headers: api})
这对我有用(从节点 js repl 调用的代码):
const axios = require("axios");
axios
.put(
"http://localhost:4000/api/token",
"mytoken",
{headers: {"Content-Type": "text/plain"}}
)
.then(r => console.log(r.status))
.catch(e => console.log(e));
日志:200
这是我的请求处理程序(我正在使用 restify):
function handleToken(req, res) {
if(typeof req.body === "string" && req.body.length > 3) {
res.send(200);
} else {
res.send(400);
}
}
Content-Type header 这里很重要。
您是否尝试过以下方法:
axios.post('/save', { firstName: 'Marlon', lastName: 'Bernardes' })
.then(function(response){
console.log('saved successfully')
});
参考:http://codeheaven.io/how-to-use-axios-as-your-http-client/
这对我有用。
let content = 'Hello world';
static apicall(content) {
return axios({
url: `url`,
method: "put",
data: content
});
}
apicall()
.then((response) => {
console.log("success",response.data)
}
.error( () => console.log('error'));
这对我有用:
export function modalSave(name,id){
console.log('modalChanges action ' + name+id);
return {
type: 'EDIT',
payload: new Promise((resolve, reject) => {
const value = {
Name: name,
ID: id,
}
axios({
method: 'put',
url: 'http://localhost:53203/api/values',
data: value,
config: { headers: {'Content-Type': 'multipart/form-data' }}
})
.then(function (response) {
if (response.status === 200) {
console.log("Update Success");
resolve();
}
})
.catch(function (response) {
console.log(response);
resolve();
});
})
};
}
我在发送纯文本时遇到问题,发现我需要用双引号将正文的值括起来:
const request = axios.put(url, "\"" + values.guid + "\"", {
headers: {
"Accept": "application/json",
"Content-type": "application/json",
"Authorization": "Bearer " + sessionStorage.getItem('jwt')
}
})
我的 webapi 服务器方法签名是这样的:
public IActionResult UpdateModelGuid([FromRoute] string guid, [FromBody] string newGuid)
我通过覆盖默认的 Content-Type 解决了这个问题:
const config = { headers: {'Content-Type': 'application/json'} };
axios.put(url, content, config).then(response => {
...
});
根据我的经验,字符串默认 Conent-Type
为 application/x-www-form-urlencoded
,对象(包括数组)默认为 application/json
。您的服务器可能需要 JSON.
只需将headers'Content-Type': 'application/json'
和发送的数据放入bodyJSON.stringify(string)
另一个简单的解决方案是用大括号将给定代码中的内容变量括起来,如下所示:
let content = 'Hello world'
axios.put(url, {content}).then(response => {
resolve(response.data.content)
}, response => {
this.handleEditError(response)
})
警告:但这不会将其作为字符串发送;它会将它包装在一个 json 主体中,如下所示:{content: "Hello world"}