每次我使用以下js代码从我的前端获取请求时,我都会收到一个400 Bad请求状态。响应体有一个错误对象:"需要非空请求体"
当我检查我的devtools网络选项卡上的请求部分时,它说"这个请求没有有效载荷"。所以在我看来它并没有发送取回的body部分
之后到达.then()
方法。
这是Typescript代码:
fetch(`api/person/${person.id}`, {
method: "PUT",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(person)
})
.then(() => this.router.navigate(["/"]))
这是c#后端:
[HttpPut("{id}")]
public IActionResult Put(int id, Person person)
{
person.Id = id;
try
{
var updatedPerson = _personRepository.Update(person);
if (updatedPerson != null)
{
return Ok(updatedPerson);
}
return NotFound();
}
catch (ArgumentNullException)
{
return BadRequest();
}
}
注意,请求甚至没有到达这个控制器。如果我在这里放置断点,则不会到达断点。
这是我在Visual Studio 2019中运行的单页应用程序。
它与postman一起工作,返回200 Ok状态码和一个对象,并到达后端断点。请求URL包含int id
和包含Json对象的正文。
这不是一个有明确答案的问题。下面是你需要采取的步骤来找出答案:
-
确保在获取请求中person参数确实存在,只需在获取
之前执行console.log(person) -
确保服务器接受'application/json'类型的内容。虽然在这种情况下,响应代码应该是不同的。
-
检查响应头,后端和前端的起源是否相同?您需要看到的内容如下:
Access-Control-Allow-Headers: * Access-Control-Allow-Methods: PUT Access-Control-Allow-Origin: *
邮差作为一个本地应用程序在你的电脑上,有不同的方式发送请求而不是你的浏览器,有时这会导致不清楚的结果。
下面是测试正在发生的事情的方法。
- 去你的主网站(http://localhost:5001或其他)在你的浏览器
- 打开浏览器开发工具(大多数浏览器为F12)
- 复制/粘贴以下获取(下面的代码)到您的Dev控制台,按
会发生什么?您是否获得数据返回(在控制台中打印)?这可能会让你进入下一步。
fetch("api/person/1")
.then(response => response.json())
.then(data => console.log(data));