MVC控制器方法没有从$ http post

时间:2018-05-27 01:29:39

标签: 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-click="login()">
</div>

AngularJS代码

app.controller('loginController',['$scope','$http', function (scope, http) {

scope.login = function () {
    var req = {
        method: 'POST',
        url: '/Account/loginInfo',
        data: { email: scope.email, password: scope.password },
        headers: {
            "Content-Type": "application/json"
        }
    }
    http(req)

        .then(function successCallback(response) {

        }, function errorCallback(response) {

        });
};
}]);

后端c#

[HttpPost]
public JsonResult loginInfo(string email, string password)
{
  //do something here
}

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

我尝试过的事情:

  • 将内容类型设置为“application / x-www-form-urlencoded”
  • 将数据作为Json对象传递
  • 将范围值转换为字符串

他们似乎都没有工作。任何人都会遇到这类问题或专家意见。

关注此帖Angular JS Not Sending Data To Web Api。没有得到批准的答案,或者与我的问题无关。

3 个答案:

答案 0 :(得分:4)

您必须将[FromBody]属性与模型参数一起使用。

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

public IActionResult Login([FromBody]Credentials creds)
{
    // do stuff
}

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

答案 1 :(得分:1)

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

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

}

答案 2 :(得分:0)

只需更改您的

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

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