我收到 400 错误请求错误:"A non-empty request body is required"来自我的抓取请求,尽管我的抓取请求有一个正文



每次我使用以下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: *
    

邮差作为一个本地应用程序在你的电脑上,有不同的方式发送请求而不是你的浏览器,有时这会导致不清楚的结果。

下面是测试正在发生的事情的方法。

  1. 去你的主网站(http://localhost:5001或其他)在你的浏览器
  2. 打开浏览器开发工具(大多数浏览器为F12)
  3. 复制/粘贴以下获取(下面的代码)到您的Dev控制台,按

会发生什么?您是否获得数据返回(在控制台中打印)?这可能会让你进入下一步。

fetch("api/person/1")
.then(response => response.json())
.then(data => console.log(data));

最新更新