Angularjs MVC控制器方法未从$http post接收json数据

Angularjs MVC控制器方法未从$http post接收json数据,angularjs,asp.net-mvc,asp.net-core,Angularjs,Asp.net Mvc,Asp.net Core,这可能是一个基本问题,但我找不到问题所在。我在后端使用.Net Core,在前端使用angularJS。下面是我的代码 HTML <div ng-controller="loginController"> <input type="text" ng-model="email"><br /> <input type="text" ng-model="password"><br /> <input type="submit" ng-c

这可能是一个基本问题,但我找不到问题所在。我在后端使用.Net Core,在前端使用angularJS。下面是我的代码

HTML

<div ng-controller="loginController">
<input type="text" ng-model="email"><br />
<input type="text" ng-model="password"><br />
<input type="submit" ng-click="login()">
</div>
后端c#

当我调试这个时,我可以看到有效负载有电子邮件和密码值,但无论如何,它们没有被传递到控制器方法。我可以看到控制器方法正在被命中,但值显示为null

我尝试过的事情:

  • 将内容类型设置为“application/x-www-form-urlencoded”
  • 将数据作为Json对象传递
  • 将范围值转换为字符串
他们似乎都没有工作。任何人面对这种问题或专家意见请


跟随这篇文章。未完全获得批准的答案,或者与我的问题无关。

您必须创建一个类或接口来发送多个参数

public class PostParams
{
    public string email { get; set; }
    public string password { get; set; }
}     
[HttpPost]
public JsonResult loginInfo(PostParams params)
{
  //do something here

}

必须对模型参数使用
[FromBody]
属性

public class Credentials
{
    public string Email { get; set; }
    public string Password { get; set; }
}

public IActionResult Login([FromBody]Credentials creds)
{
    // do stuff
}
这是因为在ASP.NET核心MVC中,默认的内容类型是
application/x-www-form-urlencoded
(用于处理HTML表单数据)。
[FromBody]
属性告诉模型绑定器尝试从JSON内容创建模型。

只需更改

data: { email: scope.email, password: scope.password },


试过了,没用。模型值仍显示为null。如果您发送选项请求或POST请求,请在web工具中查看,通常控制器会调用两次,如果您有此行为,请查看。这是POST请求URL:请求方法:POST状态代码:200 OK远程地址:[:::1]:52832推荐人策略:降级时无推荐人您必须在参数上使用
[FromBody]
属性,例如
登录信息([FromBody]字符串电子邮件,[FromBody]字符串密码)
也尝试过。该值仍然为null。您是否使用模型参数进行了尝试?e、 g.
loginInfo([FromBody]凭证creds)
@Brad,这很有效!!!那么,来自angular$http的任何请求都应该在服务器端作为[FromBody]接收?请您解释一下,我们将不胜感激。谢谢。在ASP.NET核心MVC中,默认的内容类型是
application/x-www-form-urlencoded
(用于处理HTML表单数据)。
[FromBody]
属性告诉模型绑定器尝试从JSON内容创建模型。是的,明白了。谢谢@Brad。那么,在不需要创建模型的情况下,如何仅使用一个参数(如字符串或int)发送请求呢。
public class Credentials
{
    public string Email { get; set; }
    public string Password { get; set; }
}

public IActionResult Login([FromBody]Credentials creds)
{
    // do stuff
}
data: { email: scope.email, password: scope.password },
data: { "email": scope.email, "password": scope.password },