Я изучаю angularjs и web.api v2 на данный момент.web.api не может надлежащим образом связать объект JSON
Я пытаюсь отправить простой объект javascript в контроллер web.api 2.
Контроллер не делать: принимает объект и возвращает его (web.api):
[RoutePrefix("api/v1")]
public class UsersController : ApiController
{
[HttpPost]
[Route("users")]
public IHttpActionResult Save([FromBody] User user)
{
return Ok(user);
}
}
Это пользователя класс (web.api):
public class User
{
public int Code { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address { get; set; }
public string City { get; set; }
public string Telephone { get; set; }
public string Email { get; set; }
}
В мое клиентское приложение, я реплицировал объектную модель. Мой контроллер возвращает что-то вроде этого (angularjs):
vm.user = {
firstName: '',
lastName: '',
address: '',
city: '',
telephone: '',
email: ''
};
и это мое мнение:
<div class="list card" ng-controller="userregistration as vm">
<div class="list">
<label class="item item-input item-stacked-label">
<span class="input-label">Nome:</span>
<input type="text" placeholder="" ng-model="vm.user.firstName">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Cognome</span>
<input type="text" placeholder="" ng-model="vm.user.lastName">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Indirizzo</span>
<input type="text" placeholder="" ng-model="vm.user.address">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Città</span>
<input type="text" placeholder="" ng-model="vm.user.city">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Telefono:</span>
<input type="text" placeholder="" ng-model="vm.user.telephone">
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Email</span>
<input type="text" placeholder="" ng-model="vm.user.email">
</label>
</div>
<div class="padding">
<button class="button button-block button-positive" ng-click="vm.registerUser(vm.user);">Crea Utente</button>
</div>
</div>
и это registerUser метод в мой контроллер (angularjs):
vm.registerUser = function (user)
{
dataService.registerUser(user)
.then(
function (result) {
device.showAlert(result.Code, config.name, 'CONGRATULAZIONI');
},
function (reason) {
device.showAlert(reason, config.name, 'ATTENZIONE');
}
);
}
Мой сервисный модуль (angularjs) получает объект пользователя и отправляет его моему контроллеру web.api:
function saveUser(token, user)
{
var deferred = $q.defer();
$http({
method: 'POST', url: config.webAPIsBaseUrl + '/api/v1/users',
// headers: { 'Authorization': 'Bearer ' + token },
data: { user: user }
})
.success(function (data, status, headers, config) {
console.log('saveUser() => success.');
deferred.resolve(data);
}
)
.error(function (data, status, headers, config) {
if (data.Message) {
console.log('saveUser() => error 1.');
deferred.reject(data.Message);
}
else {
console.log('saveUser() => error 2.');
deferred.reject("An error occured while registering user!", status);
}
}
);
return (deferred.promise);
}
Когда я отправляю свой объект user
в свой API, мой контроллер не может правильно сериализовать пользователя.
Все поля пустые.
Я исследовал немного с стелькой, и я видел, что объект заворачивает таким образом:
{"user":{"firstName":"LeftyX","lastName":"","address":"","city":"","telephone":"","email":""}}
Я попытался удалить user
обертки:
{"firstName":"LeftyX","lastName":"","address":"","city":"","telephone":"","email":""}
и теперь все работает так, как ожидалось.
Вопросы:
Есть ли способ, чтобы связать объекты JavaScript для модели моего контроллера?
Благодаря Энтони. Оно работает. Приветствия. – LeftyX