2014-02-18 1 views
0

현재 angularjsweb.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 }를 전달

답변

2

, ...

$http({ 
    method: 'POST', url: config.webAPIsBaseUrl + '/api/v1/users', 
    // headers: { 'Authorization': 'Bearer ' + token }, 
    data: user 
}) 
+0

감사 안토니. 그것은 작동합니다. 건배. – LeftyX

관련 문제