2017-02-13 1 views
1

Ich versuche, Post-Anfrage mit Windows-Dienst zu WorkWave API zu machen. Der Code zur Verfügung stellt durch das workwave API Beispiel ist unten angegeben:So erstellen Sie eine POST-Anfrage mit Fenster-Service mit dem folgenden HTTP + JSON

POST /api/v1/territories/429defc8-5b05-4c3e-920d-0bb911a61345/orders HTTP/1.0 
Accept: application/json 
X-WorkWave-Key: YOUR API KEY 
Host: wwrm.workwave.com 
Content-Type: application/json 

{ 
    "orders": [ 
    { 
     "name": "Order 6 - API", 
     "eligibility": { 
     "type": "on", 
     "onDates": [ 
      "20151204" 
     ] 
     }, 
     "forceVehicleId": null, 
     "priority": 0, 
     "loads": { 
     "people": 2 
     }, 
     "delivery": { 
     "location": { 
      "address": "2001 2nd Ave, Jasper, AL 35501, USA" 
     }, 
     "timeWindows": [ 
      { 
      "startSec": 43200, 
      "endSec": 54000 
      } 
     ], 
     "notes": "Order added via API", 
     "serviceTimeSec": 1800, 
     "tagsIn": [], 
     "tagsOut": [], 
     "customFields": { 
      "my custom field": "custom field content", 
      "orderId": "abcd1234" 
     } 
     } 
    } 
    ] 
} 

Dies ist mein erstes Mal, wenn ich GET/POST-Anfrage verwenden. Also ich bin mir nicht sicher, was oben geht und wie kann ich das mit meinem C# -Code tun. Welchen Schritt muss ich machen und wie kann ich das machen? Danke für deine Zeit und deinen Code.

Antwort

0

Sie können HttpWebRequest wie folgt aus:

string PostJsonToGivenUrl(string url, object jsonObject) 
    { 
     string resultOfPost = string.Empty; 

     HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); 
     httpRequest.ContentType = "application/json"; 
     httpRequest.Method = "POST"; 

     using (StreamWriter writer = new StreamWriter(httpRequest.GetRequestStream())) 
     { 
      string json = new JavaScriptSerializer().Serialize(jsonObject); 

      writer.Write(json); 
     } 

     HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); 
     using (StreamReader streamReader = new StreamReader(httpResponse.GetResponseStream())) 
     { 
      resultOfPost = streamReader.ReadToEnd(); 
     } 

     return resultOfPost; 
    } 

Wenn Sie wissen müssen, wie JavaScriptSerializer verwenden JSON-String zu bilden diesem Link: https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx

Wenn Sie weitere Informationen über HttpWebRequest Scheck benötigen diese Link: https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(v=vs.110).aspx

auch diese Antwort überprüfen kann es hilfreich sein: How to post JSON to the server?

0

Zuerst müssen Sie Request- und Response-Objekt erstellen. Sie können C# class creator wie json2charp.com verwenden.

public class Eligibility 
{ 
    public string type { get; set; } 
    public List<string> onDates { get; set; } 
} 

public class Loads 
{ 
    public int people { get; set; } 
} 

public class Location 
{ 
    public string address { get; set; } 
} 

public class TimeWindow 
{ 
    public int startSec { get; set; } 
    public int endSec { get; set; } 
} 

public class CustomFields 
{ 

    public string myCustomField { get; set; } 
    public string orderId { get; set; } 
} 

public class Delivery 
{ 
    public Location location { get; set; } 
    public List<TimeWindow> timeWindows { get; set; } 
    public string notes { get; set; } 
    public int serviceTimeSec { get; set; } 
    public List<object> tagsIn { get; set; } 
    public List<object> tagsOut { get; set; } 
    //this field will be Dictionary... 
    public CustomFields customFields { get; set; } 
} 

public class Order 
{ 
    public string name { get; set; } 
    public Eligibility eligibility { get; set; } 
    public object forceVehicleId { get; set; } 
    public int priority { get; set; } 
    public Loads loads { get; set; } 
    public Delivery delivery { get; set; } 
} 

public class OrderRequest 
{ 
    public List<Order> orders { get; set; } 
} 
public class OrderResponse 
{ 
    public string requestId { get; set; } 
} 

Und Anfrage Objektinstanz (C#) mit api Referenzprobe Werte schaffen ..

OrderRequest GetOrderRequestObject() 
    { 
     var rootObj = new OrderRequest 
     { 
      orders = new List<Order>() 
     }; 
     var order = new Order 
     { 
      name = "Order 6 - API", 
      eligibility = new Eligibility 
      { 
       type = "on", 
       onDates = new List<string>() { "20151204" } 
      }, 
      forceVehicleId = null, 
      priority = 2, 
      loads = new Loads 
      { 
       people = 2 
      }, 
      delivery = new Delivery 
      { 
       location = new Location 
       { 
        address = "2001 2nd Ave, Jasper, AL 35501, USA" 
       }, 
       timeWindows = new List<TimeWindow>(){ 
        new TimeWindow{ 
         startSec =43200, 
         endSec=54000 
        }}, 
       notes = "Order added via API", 
       serviceTimeSec = 1800, 
       tagsIn = new List<object>(), 
       tagsOut = new List<object>(), 
       customFields = new CustomFields 
       { 
        myCustomField = "custom field content", 
        orderId = "abcd1234" 
       } 

      }, 
     }; 
     rootObj.orders.Add(order); 
     return rootObj; 
    } 

Eine generische Methode post .. (Sie hinzufügen müssen Httpclient Referenz - NuGet)

 TRSULT HttpPostRequest<TREQ, TRSULT>(string requestUrl, TREQ requestObject) 
    { 
     using (var client = new HttpClient()) 
     { 
      // you should replace wiht your api key 
      client.DefaultRequestHeaders.Add("X-WorkWave-Key", "YOUR API KEY"); 
      client.BaseAddress = new Uri("wrm.workwave.com"); 
      using (var responseMessage = client.PostAsJsonAsync <TREQ>(requestUrl, requestObject).Result) 
      { 
       TRSULT result = responseMessage.Content.ReadAsAsync<TRSULT>().Result; 
       return result; 
      } 
     } 
    } 

Jetzt können Sie Anfrage machen ..

var orderReqeuest = GetOrderRequestObject(); 
OrderResponse orderResponse = HttpPostRequest<OrderRequest, OrderResponse>("/api/v1/territories/429defc8-5b05-4c3e-920d-0bb911a61345/orders", orderReqeuest); 

AKTUALISIERT:

sory, müssen wir Bezug von Microsoft ASP.NET Web API 2.2-Client-Bibliothek

enter image description here

+0

Sie bitte zu dieser Funktion 'TRSULT HttpPostRequest beschreiben hinzufügen (String requestUrl, TREQ requestObject) '. Ich kopiere und verlasse das, aber es gibt Fehler –

+0

hast du Referenz von HttpClient – levent

+0

@leavent unter diesem Inhalt hinzugefügt 'Erstellen Sie eine generische Post-Methode .. (Sie müssen hinzufügen HttpClient Referenz - NuGet)' –

Verwandte Themen