2017-03-04 111 views
0

我想知道为什么我无法将Json字符串传递给我的Rest API。Web API参数始终为空

我在VS 2015中使用WebAPI和Entityframework创建了这个项目。 Odata V3控制器和实体类是由VS自动生成的。 GET和DELETE方法正常工作。但更新和添加方法不工作,因为我无法将我的Json对象传递给我的休息api后,并把方法。参数始终为空。

这是我自动生成的Customer实体类。

public partial class Customer 
{ 
    public int CustomerID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address { get; set; } 
    public string PhoneNumber { get; set; } 
    public string Email { get; set; } 
} 

这里是我的控制器

public IHttpActionResult Post(Customer customer) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.Customers.Add(customer); 
     db.SaveChanges(); 

     return Created(customer); 
    } 

    // PUT: odata/Customers(5) 
    public IHttpActionResult Put([FromODataUri] int key, Delta<Customer>  patch) 
    { 
     Validate(patch.GetEntity()); 

     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     Customer customer = db.Customers.Find(key); 
     if (customer == null) 
     { 
      return NotFound(); 
     } 

     patch.Put(customer); 

     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbUpdateConcurrencyException) 
     { 
      if (!CustomerExists(key)) 
      { 
       return NotFound(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return Updated(customer); 
    } 

这是我的Jquery呼叫

var customerData = { 
     CustomerID: "0", 
     FirstName: FirstName, 
     LastName: LastName, 
     Address: Address, 
     PhoneNumber: PhoneNumber, 
     Email: Email 
    }; 

    var requestBody = JSON.stringify(customerData); 
    return $.ajax({ 
     url: requestUri, 
     type: "POST",     
     data: requestBody 
    }); 

这里是我的小提琴手

POST http://localhost:1360/odata/Customers/ HTTP/1.1 
Accept: application/json, text/javascript, */*; q=0.01 
Content-Type: application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With: XMLHttpRequest 
Referer: http://localhost:1360/Pages/Customers.aspx 
Accept-Language: en-US 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko 

连接:保持活动 的Content-Length :101 主机:本地主机:1360 杂注:无缓存

{"CustomerID":0,"FirstName":"wer","LastName":"wer","Address":"wer","PhoneNumber":"wer","Email":"wer"} 

没有相关的职位,为他人工作的工作对我来说:

Receiving JSON-formatted data in a Web API 2 action?

jQuery AJAX post data is null in c# web api controller

在此先感谢。请让我知道代码有什么问题以及如何解决它。

+0

有一段时间没有使用odata3,但我认为put/post不会使用delta,只有补丁操作会。如果您在方法签名中尝试客户而不是Delta ,该怎么办? – Tim

+0

这段代码是由VS自动生成的。尽管post方法在签名中只有客户,但在调试时我会得到空值。尽管json字符串被发送。服务器无法反序列化它。 – Sam

回答

0

我发现了这个问题。我应该在我的Ajax调用中添加contentType:“application/json”。只要我更新我的请求,代码就开始工作。

感谢希望这可能有所帮助。