首页 > 解决方案 > 无法在 JavaScript fetch() 中将请求正文发送到 API 端点

问题描述

我正在尝试创建一个 asp.net 核心 API,它通过 POST 请求接收 JSON 字符串化对象。为了向这个 API 发送一个 POST 请求,我使用了 JavaScriptfetch()函数。在 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);
        }

先感谢您。

标签: javascriptapipostasp.net-corefetch

解决方案


我向后端发送了一个字符串化对象,但是当后端收到请求时,正文值为空

那是因为您的客户端正在发送一个 json 有效负载,而服务器需要一个纯字符串

公共 JsonResult supervisors_name(字符串 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.Aa
    返回 Json(主管);
}

[FromBody]如果您使用的是非 api 控制器,请不要忘记。

方法2(字符串格式):

如果您想以纯字符串形式接收 json 正文,则需要声明[FromBody] string aa

[HttpPost]
public JsonResult supervisors_name( [FromBody]string aa)
{
    // 现在你将 aa 作为字符串
    返回 Json(主管);
}

客户端应该发送带有Content-Type: application/json.


推荐阅读