进一步提出我的问题,
What is causing the model to null
我花了3个多小时才发现原因。作为点击尝试过程的一部分,我从班级&中删除了[Serializable]
令人惊讶的模型开始获得价值。
Angular Service: -
app.service('loginService', ['$http', function ($http) {
this.userLogin = function (user) {
console.log(user); //prints {'username': 'username@gmail.com', 'password': 123'}
$http(
{
url: "/api/user/login",
method: "POST",
data: { 'model': user },
contentType: "application/json"
})
.then(function (data) {
if (data.status.toLower() === "success") {
return data;
}
else {
return null;
}
});
}
角度控制器
app.controller('homeCtrl', ['$scope', 'loginService', function ($scope, loginService) {
$scope.login = function (user) {
debugger;
console.log($scope.user);
var data = loginService.userLogin($scope.user);
}
的WebAPI。
[Route("api/user/login")]
public void Post([FromBody]LoginVM model)
{
if(ModelState.IsValid)
{
}
else
{
}
}
但是当我调试WebAPI模型时,它将所有值都设置为null。
我的初始LoginVM类
[Serializable]
public class LoginVM
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
以下两次更新修复了我的问题。
//[Serializable] removed this attribute
public class LoginVM
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}
$http(
{
url: "/api/user/login",
method: "POST",
data: user , // directly passed user object to API
contentType: "application/json"
})
我试图了解如何使用[Serializable]属性和&amp ;;来装饰一个类。直接传递对象有所不同??
如果我需要传递多个参数,那么我将如何传递?
答案 0 :(得分:1)
原因是Web Api会处理Serializable
属性here:
Json.NET现在检测具有SerializableAttribute和的类型 序列化该类型的所有字段,包括公共和私有,以及 忽略属性。当你感兴趣时,这很有用 对类型上的数据进行往返,并不关心JSON的外观 等。
如果您需要保留Serializable
属性,则可以使用普通JsonObject
属性修饰模型:
[Serializable]
[JsonObject]
public class LoginVM
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
}