这可能是基本问题,但我无法找到问题所在。我在后端使用.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。
我尝试过的事情:
他们似乎都没有工作。任何人都会遇到这类问题或专家意见。
关注此帖Angular JS Not Sending Data To Web Api。没有得到批准的答案,或者与我的问题无关。
答案 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 },