2016-05-12 13 views
0

Ich habe ein Gerät Buchung Temperatur/GPS-Daten zu einem Cloud-Broker. Der Broker sendet dann "HTTP JDSON-Objekte der Gerätedaten an eine URL Ihrer Wahl" (zitiert aus der Broker-Site-Dokumentation).
Wie kann ich diesen Post in C# empfangen und deserialisieren? Ich benutze newtonsoft.json. Ich habe ein ähnliches Beispiel von stackoverflow gesehen, aber für mich erzeugt es viele Fehler. Mein Code ist unten. Die öffentliche Klasse Rootobject wurde erstellt, indem der JSON eingefügt wurde, das war alles automatisch. Der Teil gegen Ende ist, womit ich nicht weiß, was zu tun ist (öffentliche Klassenprüfungsabteilung). Ich bin mir nicht sicher, wo es hingehört und wie man es richtig formatiert.
Vielen Dank für Anregungen.empfangen und verwenden Sie HTTP Post JSON in C# asp.net

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Web; 
using System.Web.Http; 
using Newtonsoft.Json; 



namespace WebServiceTest1.Models 
{ 

     public class Rootobject 
     { 
      public DateTime received { get; set; } 
      public string authtype { get; set; } 
      public string[] tags { get; set; } 
      public Routingresults routingResults { get; set; } 
      public string device_name { get; set; } 
      public int errorcode { get; set; } 
      public string source { get; set; } 
      public string timestamp { get; set; } 
      public string record_id { get; set; } 
      public string data { get; set; } 
      public int device_id { get; set; } 
     } 

     public class Routingresults 
     { 
      public int matchedRules { get; set; } 
      public object[] errors { get; set; } 
     } 

     //This is the part I dont know where to put, or how to use properly. 
     public class Testing 
     { 
      string url = "http://example.com/MethodThatReturnsJson"; 
      //I'm sure this needs to be the URL of the site that is POSTING. 

      WebClient client = new WebClient(); 

      string webServiceJsonString = client.DownloadString(url); 
      //This line is erroring out. doesn't like client.DownloadString(url) 

      Rootobject yourObject = JsonConvert.DeserializeObject<Rootobject>(webServiceJsonString); 
      //I typed Rootobject here based on class Rootobject above, but not confident that is correct. 
     } 
    } 
} 

Vielen Dank.

+0

Sie benötigen also einen Endpunkt auf Ihrer Seite, an den der Broker Anfragen sendet? Oder müssen Sie eine Abrufanforderung zum Abrufen einiger Daten ausgeben? – peco

+0

Ich brauche einen Endpunkt. Der Broker hat Regeln, und sobald er Daten vom Monitor empfängt, sendet er die Nachricht. – bairdmar

Antwort

0

Wenn Sie einfach einen Controller auf Ihrer Seite, die Post-Anfragen annehmen:

public class MyApiController : ApiController 
{ 
    public IHttpActionResult Post(Rootobject dto) 
    { 
     // do something... 

     return Ok(); 
    } 
} 

Dieser Beitrag Anfrage api/myapi akzeptieren, wenn Sie Ihre Routen-Setup mit der Standardroute Vorlage haben:

routes.MapHttpRoute(
    name: "API Default", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 
+0

Wow, das scheint perfekt. Ich werde es versuchen, sobald ich eine Chance habe. Vielen Dank! – bairdmar

+0

Funktioniert perfekt testen localhost über fiddler. Vielen Dank. – bairdmar

Verwandte Themen