2013-01-24 34 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#对象,它应该工作的罚款。

相关问题