현재 angularjs 및 web.api v2을 공부하고 있습니다.web.api가 JSON 객체를 제대로 바인딩 할 수 없습니다.
web.api 2 컨트롤러에 간단한 javascript 개체를 제출하려고합니다.
컨트롤러는 많이하지 않습니다는 : 객체를 받아 (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":""}
을 이제 모든 것이 예상대로 작동합니다.
질문 :
내 컨트롤러의 모델에 자바 스크립트 객체를 결합하는 방법이 있나요? 다만이 같은 user
을 통과하는 대신 $http()
에 data: { user: user }
를 전달
감사 안토니. 그것은 작동합니다. 건배. – LeftyX