【发布时间】:2021-11-15 01:09:42
【问题描述】:
每次我使用以下 js 代码从前端发出 fetch 请求时,我都会收到 400 Bad request 状态。响应的主体有一个错误对象说:“需要一个非空的请求主体”。
当我检查我的 devtools 网络选项卡上的请求部分时,它显示“此请求没有有效负载”。所以在我看来,它没有发送我的 Fetch 的正文部分。
之后确实会到达.then() 方法。
这是打字稿代码:
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 运行的单页应用程序。
然而,它与邮递员一起工作,返回 200 Ok 状态代码和一个对象,并到达后端断点。请求 URL 包含 int id 和包含 Json 对象的正文。
【问题讨论】:
-
无法到达控制器的原因可能是有中间件来验证请求体。您的浏览器是否将另一个请求(如
Options或Fetch)与您的请求一起发送到同一个 url?闻起来好像标题有问题,以允许正文。请参阅 CORS 政策 -
@AbrorAbdullaev 根据“网络”选项卡,它只发送 PUT。我认为没有其他任何东西被发送。请您详细说明我可以使用 CORS 政策做什么?谢谢。
-
你检查过 javascript person 不为空吗?你检查浏览器的开发者工具是否有 javascript 错误?
-
@Serge 是的,我已经检查过了,并且 person 对象确实存在。我有更多关于另一个答案下的回复中发生的事情的详细信息。我现在发现使用 Angular 的 httpClient 执行请求不会出错,但是 fetch 函数会出错。
-
@alalalal 你检查浏览器开发者工具的控制台了吗?它通常显示 javascript 错误
标签: javascript angularjs typescript asp.net-web-api