Angularjs JSON数据不会在asp.net核心web API中序列化
我使用ASP.Net核心WebApi和AngularJS创建了一个简单的登录页面。 当我使用$http将数据从angularJS发布到web api时,JSON数据不会像web api控制器中预期的那样序列化为 这是我在WebAPI中的ViewModel类Angularjs JSON数据不会在asp.net核心web API中序列化,angularjs,json,asp.net-web-api,asp.net-core,Angularjs,Json,Asp.net Web Api,Asp.net Core,我使用ASP.Net核心WebApi和AngularJS创建了一个简单的登录页面。 当我使用$http将数据从angularJS发布到web api时,JSON数据不会像web api控制器中预期的那样序列化为 这是我在WebAPI中的ViewModel类 public class LoginVM { [Required] public string Username { get; set; } [Required] public string Passwo
public class LoginVM
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
webapi控制器方法
[HttpPost]
[Route("UserLogin")]
public LoginVM UserLogin(LoginVM loginVM)
{
if (loginVM.Username == "Admin" && loginVM.Password == "123")
{
return new LoginVM();
}
else
{
return null;
}
}
Statupc.cs中的ConfigureServices方法
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
services.AddCors(options => options.AddPolicy("AllowAll", p => p.AllowAnyOrigin()));
}
AngularJS服务
(function () {
'use strict';
app.factory("membershipService", membershipService);
membershipService.$inject = ['$http', '$rootScope', '$log'];
function membershipService($http, $rootScope, $log) {
var urlHost = "http://localhost:33443";
function login(user) {
var url = urlHost + "/user/UserLogin"
return $http.post(url, user)
.then(function (result) {
$log.info(result);
return result.data;
}, function (error) {
$log.info(error);
}
);
};
return {
login: login
};
}
}());
这里我不打算提及AngularJs视图和控制器代码,因为用户对象以以下json格式成功地传递给AngularJs服务
{username="admin",password="123"}
不幸的是,Json数据没有按预期序列化到Web Api控制器方法中的LoginVM对象。用户名和密码字段都变为空
如果有人能解释我在代码中做错了什么,我将不胜感激
[HttpPost]
[Route("UserLogin")]
public LoginVM UserLogin([FromBody]LoginVM loginVM)
{
if (loginVM.Username == "Admin" && loginVM.Password == "123")
{
return new LoginVM();
}
else
{
return null;
}
}
以及服务的变化:
(function () {
'use strict';
app.factory("membershipService", membershipService);
membershipService.$inject = ['$http', '$rootScope', '$log'];
function membershipService($http, $rootScope, $log) {
var urlHost = "http://localhost:33443";
function login(user) {
var url = urlHost + "/user/UserLogin"
return $http.post(url, { loginVM : user})
.then(function (result) {
$log.info(result);
return result.data;
}, function (error) {
$log.info(error);
}
);
};
return {
login: login
};
}
}());
Modelbinder不会绑定您的视图模型,如果传递的数据将具有在控制器方法中捕获的其他名称(如果您使用google chrome f12并检查post中传递的数据)
如果这不起作用,请尝试从字符串反序列化json
[HttpPost]
[Route("UserLogin")]
public LoginVM UserLogin(string loginVM)
{
var model = JsonConvert.DeserializeObject<LoginVM >(loginVM);
if (model .Username == "Admin" && model .Password == "123")
{
return new LoginVM();
}
else
{
return null;
}
}
(function () {
'use strict';
app.factory("membershipService", membershipService);
membershipService.$inject = ['$http', '$rootScope', '$log'];
function membershipService($http, $rootScope, $log) {
var urlHost = "http://localhost:33443";
function login(user) {
var url = urlHost + "/user/UserLogin"
return $http.post(url, {loginVM: JSON.stringify(user) } )
.then(function (result) {
$log.info(result);
return result.data;
}, function (error) {
$log.info(error);
}
);
};
return {
login: login
};
}
}());
[HttpPost]
[路由(“用户登录”)]
public LoginVM UserLogin(字符串LoginVM)
{
var model=JsonConvert.DeserializeObject(loginVM);
if(model.Username==“Admin”&&model.Password==“123”)
{
返回新的LoginVM();
}
其他的
{
返回null;
}
}
(功能(){
"严格使用",;
应用程序工厂(“会员服务”,会员服务);
membershipService.$inject=['$http'、'$rootScope'、'$log'];
函数成员身份服务($http、$rootScope、$log){
var urlHost=”http://localhost:33443";
功能登录(用户){
var url=urlHost+“/user/UserLogin”
返回$http.post(url,{loginVM:JSON.stringify(user)})
.然后(函数(结果){
$log.info(结果);
返回结果数据;
},函数(错误){
$log.info(错误);
}
);
};
返回{
登录:登录
};
}
}());
您是否能够访问Web API控制器方法?你能通过loginVM读取数据吗?你用Fiddler或Postman测试过吗?如果没有,请尝试。它将到达控制器方法。它序列化为Username=null和Password=null的LoginVM对象尝试创建一个具有“Username”和“Password”而不是“Username”和“Password”的对象。我有一个没有“AddJsonOptions”的项目。