我正在尝试创建一个asp.net核心API,该API通过POST请求接收JSON字符串化对象。要将POST请求发送到此API,请使用JavaScript fetch()
函数。在POST请求的主体中,我向后端发送了一个字符串化的对象,但是当后端接收到该请求时,主体值为空!为什么是这样?
我的JavaScript通话:
function BindSupervisor() {
(() => {
const rawResponse = fetch('mu_url', {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({aa:'W15'})
});
const content = rawResponse.json();
console.log(content);
})();
}
我的API后端:
public JsonResult supervisors_name(string aa)
{
// My logic
return Json (supervisors);
}
先谢谢您
答案 0 :(得分:1)
我将一个字符串化的对象发送到后端,但是当后端接收到请求时,主体值为空
那是因为您的客户端正在发送 json负载,而服务器则期望纯字符串:
public JsonResult supervisors_name(string aa)
结果,字符串aa
始终为null
。
如何修复:
您可以以JSON
格式发送有效载荷并绑定参数,也可以以String
格式发送并绑定有效载荷。但是不要把它们混在一起。
创建一个虚拟Payload
类来保存aa
属性:
public class Payload {
public string Aa {get;set;}
}
并更改操作方法以接受Payload
参数:
[HttpPost] public JsonResult supervisors_name2([FromBody]Payload data) { // now you get the data.Aa return Json (supervisors); }
如果您使用的是非API控制器,请不要忘记[FromBody]
。
如果要以纯字符串形式接收json正文,则需要声明[FromBody] string aa
:
[HttpPost] public JsonResult supervisors_name([FromBody]string aa) { // now you get the aa as string return Json (supervisors); }
客户端应发送标头为Content-Type: application/json
的请求。