Angularjs MVC控制器方法未从$http post接收json数据
这可能是一个基本问题,但我找不到问题所在。我在后端使用.Net Core,在前端使用angularJS。下面是我的代码 HTMLAngularjs 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
<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 },