2013-01-24 38 views
2

我想調用一個POST API控制器。控制器被調用,但複雜的對象是空的。我已經跑Fiddler和對象甚至來到人口稠密。我究竟做錯了什麼?MVC API控制器的複雜對象沒有從jquery填充ajax調用

我的C#對象

public class RegisterUser 
{ 
    public Guid PersonId { get; set; } 
    public string Email { get; set; } 
    public string Business { get; set; } 
    public string EmployeeNumber { get; set; } 
    public string UserName { get; set; } 
} 

API柱控制器

public HttpResponseMessage Post(RegisterUser user) 
{ 
    //This is where the problem is. Everything in user is null 
    //even though I can see it coming through on Fiddler. 
} 

Javascript代碼

function User(personId, userName, email, business, employeeNumber) { 
    this.PersonId = personId; 
    this.Email = email; 
    this.Business = business; 
    this.EmployeeNumber = employeeNumber; 
    this.UserName = userName; 
} 

function RegisterUser(url) { 
    var createdUser = new User("b3fd25ba-49e8-4247-9f23-a6bb90a62691", "username", "email", "business", "56465"); 
    $.ajax(url, { 
     data: JSON.stringify({ user: createdUser }), 
     type: "post", 
     contentType: "application/json" 
    }); 
} 

的Web API路由配置

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     config.Routes.MapHttpRoute(
      name: "RegisterApi", 
      routeTemplate: "api/{controller}/{user}" 
     ); 
    } 
} 
+0

AJAX調用是異步的,它看起來像是在返回任何數據之前執行結果代碼。 –

+1

問題是API控制器RegisterUser對象沒有被填充... js ajax甚至沒有返回。 – Boone

+0

你的動作是否有HttpPost屬性? –

回答

3

createdUser已經包含了正確的格式由Web.Api所需要的數據,因此沒有必要把它包起來的user財產混淆模型內部粘合劑。

只要寫data: JSON.stringify(createdUser)它應該很好地工作:

function RegisterUser(url) { 
    var createdUser = new User("b3fd25ba-49e8-4247-9f23-a6bb90a62691", "username", "email", "business", "56465"); 
    $.ajax(url, { 
     data: JSON.stringify(createdUser), 
     type: "post", 
     contentType: "application/json" 
    }); 
} 

模型結合的原則很簡單,直到你有匹配屬性名稱和對象結構中的JS和C#對象,它應該工作的罰款。

相關問題