2017-03-04 24 views
0

私はJsonの文字列を私のRest APIに渡すことはできません。Web APIのパラメータは常にNullです

WebAPIとEntityframeworkを使用してVS 2015でこのプロジェクトを作成しました。 Odata V3 Controllerとエンティティクラスは、VSによって自動的に生成されます。 GET、およびDELETEメソッドは正常に動作します。私のJsonオブジェクトを残っているAPIのpostとputメソッドに渡すことができなかったので、updateメソッドとaddメソッドは機能しません。パラメータは常に空です。

ここに私の自動生成されたカスタマーエンティティクラスがあります。ここで

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 ホスト:localhostを: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はデルタを使用しないと思うでしょう。デルタの代わりにお客様のメソッドシグニチャを試すとどうなりますか? – Tim

+0

このコードはVSによって自動生成されます。 postメソッドはシグネチャ内の顧客しか持っていませんが、デバッグ中にnull値が返されます。 jsonの文字列が送信されますが。サーバーはそれをデシリアライズできません。 – Sam

答えて

0

問題が見つかりました。 AjaxコールでcontentType: "application/json"を追加しておく必要があります。私の要求を更新するとすぐに、コードが動作し始めました。

ありがとうございます。

関連する問題