javascript - 无法在 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);
}
先感谢您。
解决方案
我向后端发送了一个字符串化对象,但是当后端收到请求时,正文值为空
那是因为您的客户端正在发送一个 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
.
推荐阅读
- amazon-web-services - 使用 S3 存储桶 zip 捆绑代码自动化 Lambda 部署
- github-actions - 在 GitHub Actions 中是否可以将步骤传递给子操作?
- mysql-5.7 - mysql工作台的客户端连接信息栏总是显示NULL
- r - 我有一个庞大的数据集,其中缺少一些日期。我很难创建时间序列模型
- java - SQL 异常:位置 3 JAVA 不支持的标记
- jenkins - Jenkinsfile 显示 fortfiy 扫描结果
- c - 宏没有产生所需的结果
- angular - 获取 app-component 中的动态路由参数值,并将其添加到 Angular 12 中应用程序的每个路由中
- javascript - 声明并传入函数时的节点js内存使用情况
- django - 我希望用户可以在不登录的情况下使用下拉菜单更改网站语言,但如果他们登录网站应该翻译为他们保存的语言首选项