控制器视图模型值从我的SPA FETCH POST接收为null

时间:2017-11-03 23:02:53

标签: c# typescript post asp.net-core-mvc viewmodel

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

    [HttpPost]
    [AllowAnonymous]
    public async Task<IActionResult> Get([FromForm] LoginViewModel model)
    {

我的asp.net Core API登录视图模型是:

public class LoginViewModel
{
    public string Username { get; set; }
    public string Password { get; set; }
}

我的SPA是用Typescript编写的。

我的SPA界面是:

interface userLogin {
  Username: string;
  Password: string;
}

我将其声明为:

private login: userLogin,

我的FETCH结构如下:

 // 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"
    }

注意:在POSTMAN中设置时,这可以正常工作。

查看这些控制台日志:

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中显示有效负载的网络标签:

enter image description here

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

enter image description here

为什么我在获取POST时变为空?我需要做什么才能让我的API获得值?

1 个答案:

答案 0 :(得分:1)

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

将装饰器属性从application/json更改为FromBody

FromForm