我正在使用fetch调用POST控制器动作,但是在控制器中,主体似乎为空。
这是我的提取代码段-这在.net核心Vue项目中。这是一个打字稿文件。
var data = JSON.stringify(this.newProduct);
console.log(data)
fetch('api/Product/AddNewProduct', {
method: 'POST',
body: data,
headers: {
'Content-Type': 'application/json'
}
}).then(res => res.json())
.then(response => console.log('Success:', JSON.stringify(response)))
.catch(error => console.error('Error:', error));
这是我在Firefox中看到的请求(和有效负载):
但是在我的.net核心后端中,当API被命中时,我似乎无法获取主体的值或请求中的任何内容。
[HttpPost("[action]")]
public IActionResult AddNewProduct([FromBody] string body)
{
Product newProduct;
try
{
/*Added the below snippet for testing, not sure if actually necessary */
using (var reader = new StreamReader(Request.Body))
{
var requestBody = reader.ReadToEnd();
// Do something
}
//Convert the request body to an object
newProduct = JsonConvert.DeserializeObject<Product>(body);
}
catch (Exception e)
{
return new BadRequestResult();
}
在这里,在我的调试器中,body
和requestBody
均为空。有任何想法吗?
答案 0 :(得分:1)
.NET没有看到您传递字符串,而是看到了JSON,因为您传递了Content-Type
的{{1}}标头,因此它将尝试反序列化并将其映射到您的请求对象。在您的情况下,由于参数为application/json
,因此解析器尝试将JSON对象映射到您的string body
并失败-因此它传递了string
。
您可以尝试更改请求以将null
作为text/plain
传递(或删除content-type
标头)或将API参数更改为要发送的对象:
content-type
答案 1 :(得分:0)
添加到标题接受
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
},