无法将请求正文发送到JavaScript fetch()中的API端点

时间:2019-06-22 11:58:48

标签: javascript api post asp.net-core fetch

我正在尝试创建一个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);
        }

先谢谢您

1 个答案:

答案 0 :(得分:1)

  

我将一个字符串化的对象发送到后端,但是当后端接收到请求时,主体值为空

那是因为您的客户端正在发送 json负载,而服务器则期望纯字符串

public JsonResult supervisors_name(string aa)

结果,字符串aa始终为null


如何修复:

您可以以JSON格式发送有效载荷并绑定参数,也可以以String格式发送并绑定有效载荷。但是不要把它们混在一起。

方法1(Json格式):

创建一个虚拟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]

方法2(字符串格式):

如果要以纯字符串形式接收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的请求。