【发布时间】:2017-01-30 02:18:58
【问题描述】:
我使用 ASP.Net Core WebApi 和 AngularJS 创建了一个简单的登录页面。 当我使用 $http 从 angularJS 将数据发布到 Web api 时,JSON 数据不会像 Web Api 控制器中的预期那样序列化。
这是我在 Web API 中的 ViewModel 类
public class LoginVM
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
Web API 控制器方法
[HttpPost]
[Route("UserLogin")]
public LoginVM UserLogin(LoginVM loginVM)
{
if (loginVM.Username == "Admin" && loginVM.Password == "123")
{
return new LoginVM();
}
else
{
return null;
}
}
statup.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 对象。用户名和密码字段都变为空。
如果有人能解释一下我在代码中做错了什么,请不胜感激
【问题讨论】:
-
你能访问Web API控制器方法吗?您是否能够读取通过 loginVM 传入的数据?
-
你用 Fiddler 或 Postman 测试过吗?不行就试试。
-
到达控制器方法。它使用 Username=null 和 Password=null 序列化为 LoginVM 对象
-
尝试使用“用户名”和“密码”而不是“用户名”和“密码”创建对象。我有一个没有“AddJsonOptions”的项目。
标签: angularjs json asp.net-web-api asp.net-core