.NET Core 3.1 中使用 Fetch API 的 Ajax 调用
Posted
技术标签:
【中文标题】.NET Core 3.1 中使用 Fetch API 的 Ajax 调用【英文标题】:Ajax Calls with Fetch API in .NET Core 3.1 【发布时间】:2020-04-11 11:10:13 【问题描述】:我刚刚迁移到 .NET Core 3.1,在我必须更新的不同内容中,我无法让我的 ajax 调用正常工作。
当我进行 ajax 调用时,没有任何数据绑定到我的操作中的对象参数。
这就是我在剃须刀页面中拨打电话的方式
fetch('/Administration/UpdateUserStatus',
method: 'POST',
credentials: 'include',
headers:
'Content-Type': 'application/json',
'RequestVerificationToken': $('input[name="__RequestVerificationToken"]').val()
,
body: JSON.stringify(data)
)
还有我的控制器操作
[HttpPost]
public IActionResult UpdateUserStatus([FromBody]User user)
...
在上面的示例代码中,调试代码我可以看到user
以null
出现,因此来自ajax 调用的数据不会绑定到User
对象。
如果我删除[FromBody]
,user
不再以null
的形式出现,但数据仍然没有绑定。所有属性为 null 或默认值。
.NET Core 2.1 一切正常。
我需要在Startup.cs
中添加什么吗?也许我缺少一个新配置?
谢谢
【问题讨论】:
首先要检查两个版本的请求,看看有没有区别。 【参考方案1】:我解决了我的问题。 Json.NET 已从 .NET Core 3.0 中删除,因此我必须添加对包 Microsoft.AspNetCore.Mvc.NewtonsoftJson
(NuGet) 的引用,然后在 ConfigureServices
方法下将 .AddNewtonsoftJson()
添加到 Razor Pages,就像这样
services.AddRazorPages().AddNewtonsoftJson();
之后,一切都像以前一样工作。
Docs
【讨论】:
天哪,你救了我! 谢谢!花了很多时间试图理解为什么模型绑定在我的 AJAX POST 请求上失败。我对文档感到困惑,因为我认为 System.Text.Json 将处理模型绑定... 发现这篇有用的帖子可以进一步解释:dev.to/wattengard/… 两天后我终于找到了这个答案。谢谢以上是关于.NET Core 3.1 中使用 Fetch API 的 Ajax 调用的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Asp.net Core 3.1 中使用 Ajax 刷新或重新加载 ViewComponent?
将项目从 2.2 更新到 3.1(缺少程序集)或如何在 .NET Core 中使用 API POST 请求时,PostAsJsonAsync()在 .Net Core 3.1 中不起作用 [重复]
在 .NET Core 3.1 中使用 ImageSource?
如何将 .net core Web API 项目添加到现有的 .NET core (3.1) Web Application 项目中?