Permalänk
Medlem

Hjälp med REST API i PHP med C#

Har försökt sätta upp ett REST API för första gången på min webserver och har fått det att fungera när man testar det med ett program som heter POSTMAN. Datan skickas till servern och servern skickar tillbaka data till POSTMAN som läser det korrekt. När jag nu ska försöka använda det här i ett program som jag skriver i C# får jag det inte riktigt att fungera. Jag kan skicka data i json format från c# programmet till servern utan problem, men vet sen inte hur jag ska hantera datan som servern ska skicka tillbaka till programmet.

Koden i php för att skicka tillbaka data är så enkel som:

echo json_encode(array("message" => "Data was successfully entered into api database. Here is sent data: " . $testString));

Funkar perfekt när jag testar I POSTMAN men vet inte riktigt vilka steg jag måste ta i c# för att ta emot detta i json format. Kör med HttpClient för att skicka POST request från c#.

Koden jag använder för det i c# är

var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); var result = client.PostAsync(url, content).Result;

Datan jag får tillbaka i c#:

StatusCode: 201, ReasonPhrase: 'Created', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Access-Control-Allow-Origin: * Access-Control-Allow-Methods: POST Access-Control-Max-Age: 3600 Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With Pragma: no-cache Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Cache-Control: no-store, must-revalidate, no-cache Date: Sat, 20 Apr 2019 20:46:17 GMT Set-Cookie: PHPSESSID=0sj7mprqn3t52n5vfa8ho577a7; path=/ Server: Apache/2.4.25 Server: (Raspbian) Content-Length: 109 Content-Type: application/json; charset=UTF-8 Expires: Thu, 19 Nov 1981 08:52:00 GMT }

istället för datan jag får i POSTMAN:

{ "message": "Data was successfully entered into api database. Here is sent data: POST from POSTMAN" }

Permalänk
Medlem

result-variabeln i din kod är en instans av HttpResponseMessage, vars Content-property borde innehålla svaret du är ute efter. ReadAsStringAsync() borde ta ut den till en string så att du kan läsa den. Antagligen är det innehållet av Headers-propertyn eller eller resultatet av ToString() du visar i ditt inlägg. Du borde även kunna se dessa headrar i Postman.

Gissningsvis så vill du använda NewtonSoft.Json för att deserialisera JSON-innehållet till ett riktigt objekt eller till en dynamic.

Permalänk
Medlem

@KAD: Fick det att fungera, tusen tack för hjälpen. Första gången jag försöker mig på något sånt här.
Lägger upp den fungerande koden nedan om någon annan stöter på liknande problem.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Newtonsoft.Json.Linq; using System.Net.Http; using Newtonsoft.Json; namespace testREST { class Program { static void Main(string[] args) { JObject jsonObject = new JObject(); jsonObject.Add("testString", "Testing, Console Program"); HttpClient client = new HttpClient(); string url = "url till api"; var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json"); var result = client.PostAsync(url, content).Result; var test = result.Content.ReadAsStringAsync().Result; testObject testObj = JsonConvert.DeserializeObject<testObject>(test); Console.WriteLine(testObj.message); Console.ReadKey(); } } public class testObject { public string message { get; set; } } }