2017-03-04 83 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」。只要我更新我的請求,代碼就開始工作。

感謝希望這可能有所幫助。