2017-02-13 4 views
1

Я пытаюсь сделать запрос на отправку с помощью службы Windows на WorkWave API. Код обеспечения на примере workwave API приведен ниже:Как сделать запрос POST с сервисом окна с учетом следующего 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" 
     } 
     } 
    } 
    ] 
} 

Это мой первый раз, когда я использую запрос GET/POST. Поэтому я не уверен, что происходит выше, и как я могу это сделать с помощью кода C#. Каким будет шаг, который я должен выполнить, и как я могу это сделать. Спасибо за ваше время и за ваш код.

ответ

0

Вы можете использовать HttpWebRequest как следующее:

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; 
    } 

Если вам нужно знать, как использовать JavaScriptSerializer сформировать JSON строку проверить эту ссылку: https://msdn.microsoft.com/en-us/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx

Если Вам необходима дополнительная информация о HttpWebRequest проверки этого ссылка: https://msdn.microsoft.com/en-us/library/system.net.httpwebrequest(v=vs.110).aspx

также проверить этот ответ может быть полезно: How to post JSON to the server?

0

Во-первых, вам нужно создать объект запроса и ответа. вы можете использовать создатель класса C#, например json2charp.com.

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; } 
} 

И создать запрос объекта экземпляра (C#) со значениями ссылочных апи образца ..

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; 
    } 

Создать обобщенный метод пост .. (вам нужно добавить HttpClient ссылки - 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; 
      } 
     } 
    } 

Теперь вы можете сделать запрос ..

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

ОБНОВЛЕНО:

Сори, нам нужно добавить ссылку на Web API библиотеки 2.2 Клиент Microsoft ASP.NET

enter image description here

+0

Пожалуйста, вы можете рассказать об этой функции 'TRSULT HttpPostRequest (string requestUrl, TREQ requestObject) '. я копирую и миную это, но он дает ошибку –

+0

вы добавили ссылку HttpClient – levent

+0

@leavent ниже этого содержимого 'Создайте общий метод публикации .. (вам нужно добавить ссылку HttpClient - NuGet)' –