C# 控制器viewmodel值从我的SPA FETCH POST接收为null

C# 控制器viewmodel值从我的SPA FETCH POST接收为null,c#,typescript,post,asp.net-core-mvc,viewmodel,C#,Typescript,Post,Asp.net Core Mvc,Viewmodel,我正在从SPA发回我的Asp.net控制器。控制器具有以下设置: [HttpPost] [AllowAnonymous] public async Task<IActionResult> Get([FromForm] LoginViewModel model) { 我的SPA是用打字机写的 我的SPA界面是: interface userLogin { Username: string; Password: string; } 我宣布: p

我正在从SPA发回我的Asp.net控制器。控制器具有以下设置:

    [HttpPost]
    [AllowAnonymous]
    public async Task<IActionResult> Get([FromForm] LoginViewModel model)
    {
我的SPA是用打字机写的

我的SPA界面是:

interface userLogin {
  Username: string;
  Password: string;
}
我宣布:

private login: userLogin,
我的回执结构如下:

 // Lets do a fetch!

  console.log("username, password: ", this.username, this.password);

  this.login.Username = this.username;
  this.login.Password = this.password;

  console.log("login.username, login.password", this.login);
  console.log("JSON login: ", JSON.stringify(this.login));

  const task = fetch("/api/jwt", {
    method: "POST",
    body: JSON.stringify(this.login),
    headers: {
      "Content-Type": "application/json;charset=UTF-8"
    }
注意:在邮递员中设置时,此功能有效

查看这些控制台日志:

username, password: admin password
login.ts:37 login.username, login.password {Username: "admin", Password: "password"}
login.ts:38 JSON login:  {Username: "admin", Password: "password"}
以下是Chrome中的网络选项卡,显示有效负载:

最后,控制器在中断时暂停,显示POST的值为null和null:


为什么我在回执栏上会变空?我需要做什么才能使我的API接收这些值?

您将contentType显式指定为
application/json
,并发送对象的json字符串化版本。这将在进行异步调用时发送请求体中的数据。因此,您需要使用
FromBody
属性,以便框架知道如何从包含json格式的js对象/数据的请求中正确地进行模型绑定

将decorator属性从
FromForm
更改为
FromBody

[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Get([FromBody] LoginViewModel model)
{
    // to do : Return something
}
[HttpPost]
[异名]
公共异步任务Get([FromBody]LoginViewModel模型)
{
//做:归还某物
}

是的,很管用,谢谢。所以我假设每当我向我的api发帖时,我的控制器必须有“FromBody”?
[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> Get([FromBody] LoginViewModel model)
{
    // to do : Return something
}