2016-04-06 3 views
0

Hallo alles, was ich versuche, JSON auf eine API, die ich mit AJAX und cURL tun kann.Wie stelle ich JSON-Daten mit Ajax mit C#

Der Code in C# .net App kann den cURL Code behandeln und zu SQL schreiben:

curl "http://localhost:38194/API/inbound" --data "FirstName=test4&LastName=test&[email protected]" 

aber wenn ich versuche, mit von C# POST:

using (var client = new HttpClient()) 
{ 
    var request = new 
    { 
     FirstName = reader[1], 
     LastName = reader[2], 
     Email = reader[3] 
    }; 

    var response = client.PostAsync("http://localhost:38194/API/inbound", 
     new StringContent(JsonConvert.SerializeObject(request).ToString(), Encoding.UTF8, "application/json")).Result; 

    if (response.IsSuccessStatusCode) 
    { 
     //Do something 
    } 
} 

Es sendet die Daten wie request = { FirstName = "Tom", LastName = "Buckle", Email = "[email protected]" }, die ich meinen Controller nehme an mit nicht verarbeiten kann:

public string Post([FromBody] FormDataCollection formValues) 

ich gesucht und s pent Stunden dazu und vermuten, dass das Format, das ich den POST senden nicht mit meinem API Controller FormDataCollection funktioniert. Ich muss zugeben, dass ich diese Dinge nicht gut verstehe und mehr durch Versuch und Irrtum lernen kann. Wahrscheinlich nicht elegant, aber das ist mein API-Controller-Code, der mit cURL funktioniert.

public string Post([FromBody] FormDataCollection formValues) 
{ 
    string first_name = null, last_name = null, email = null; 

    string connStr = ConfigurationManager.ConnectionStrings["inboundapplicant"].ConnectionString; 
    using (SqlConnection connection = new SqlConnection(connStr)) 
    { 
     using (SqlCommand command = new SqlCommand()) 
     { 

      if (!string.IsNullOrWhiteSpace(formValues.Get("FirstName"))) 
      { 
       first_name = formValues.Get("FirstName"); 
      } 
      if (!string.IsNullOrWhiteSpace(formValues.Get("LastName"))) 
      { 
       last_name = formValues.Get("LastName"); 
      } 
      if (!string.IsNullOrWhiteSpace(formValues.Get("Email"))) 
      { 
       email = formValues.Get("Email"); 
      } 

      command.Connection = connection; 
      command.CommandType = CommandType.Text; 
      command.CommandText = "INSERT into [dbo].[Leads] (FirstName, LastName, Email) VALUES (@first_name, @last_name, @email)"; 

      command.Parameters.AddWithValue("@first_name", first_name == null ? (object)DBNull.Value : first_name); 
      command.Parameters.AddWithValue("@last_name", last_name == null ? (object)DBNull.Value : last_name); 
      command.Parameters.AddWithValue("@email", email == null ? (object)DBNull.Value : email); 


      try 
      { 
       connection.Open(); 
       int recordsAffected = command.ExecuteNonQuery(); 
      } 
      catch (SqlException) 
      { 
       throw; 
      } 
      finally 
      { 
       connection.Close(); 
      } 
     } 
    } 

    return "success"; 
} 
+0

https://www.bing.com/search?q=Issue+Post+JSON+C%23+webapi sollten Sie einige Antworten geben ... –

Antwort

0

Da Sie die json als Anfrage-Payload vorbei sind, während Sie versuchen, es als Formdata zuzugreifen. Keine Notwendigkeit [FromBody] zu verwenden

public string Post(FormDataCollection formValues) 
0

Sie sollten kein [FormBody] verwenden und keine FormDataCollection verwenden. Sie sollten ein Modell mit den Eigenschaften Vorname Nachname und E-Mail als Eigenschaften erstellen.

Ihre Methode sieht dann wie folgt aus:

public string Post(PersonInformation personInformation) 
Verwandte Themen