The following examples may help you to get started quickly.
C# has multiple possibilities to connect with WebConnect such as HttpClient, WebRequest, etc.
In the following example we will use the HttpClient of Microsoft. The example can be compiled in
Visual Studio 2010 or later.
Use NuGet Package Manager to install the Web API Client Libraries package.
From the Tools menu, select Library Package Manager, then select Package Manager Console.
In the Package Manager Console window, type the following command:
Install-Package Microsoft.AspNet.WebApi.Client
The Main function calls an async method named RunAsync
and then blocks until RunAsync
completes.
using System; using System.IO; using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Threading.Tasks; using System.Xml.XPath; namespace WebConnectClient { class Program { static void Main() { RunAsync().Wait(); Console.WriteLine("Press enter to end the application..."); Console.ReadLine(); } static async Task RunAsync() { // TODO - Initialize HttpClient } } }
We create a new HttpClient
and set some of it's properties, like the
'Accept' and
'Authorization'
header.
static async Task RunAsync() { try { using (var client = new HttpClient()) { client.BaseAddress = new Uri("https://ponte.venice.be/WebConnect/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/xml")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes("User:Password"))); // TODO - Send requests } } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); } }
We'll send a few requests and process the answer.
// Get the customer card with number '1' and subnumber '0' from dossier 'Demo'. HttpResponseMessage response = await client.GetAsync("api/Demo/Customer?NumberPair=1\t0"); if (!response.IsSuccessStatusCode) Console.WriteLine("Get customer card failed."); else { // Get the response xml. string xml = await response.Content.ReadAsStringAsync(); // Display the customer name. using (var stream = new StringReader(xml)) { var xpath = new XPathDocument(stream); var navigator = xpath.CreateNavigator(); var nameNode = navigator.SelectSingleNode("Response/Customers/Customer/Fields/Name"); if (nameNode != null) Console.WriteLine("Retrieved customer card '" + nameNode.Value + "'."); } } // Create a new customer card in dossier 'Demo'. string json = "{" + " \"Request\": {" + " \"Customers\": {" + " \"Customer\": [" + " {" + " \"Fields\" : {" + " \"Name\": \"My customer NV\"," + " \"VatNum\": \"BE 0427.604.308\"," + " \"LegalForm\": \"NV\"" + " }" + " }" + " ]" + " }" + " }" + "}"; using (StringContent content = new StringContent(json, Encoding.UTF8, "application/json")) { response = await client.PostAsync("api/Demo/Customer", content); } // Display the result. if (!response.IsSuccessStatusCode) Console.WriteLine("Create customer card failed."); else { // Gets the response xml. string xml = await response.Content.ReadAsStringAsync(); // Retrieve the system number string sysNum = null; using (var stream = new StringReader(xml)) { var xpath = new XPathDocument(stream); var navigator = xpath.CreateNavigator(); var sysNumNode = navigator.SelectSingleNode("Response/Customers/Customer/Fields/SysNum"); if (sysNumNode != null) sysNum = sysNumNode.Value; } if (sysNum == null) return; // Display the result. Console.WriteLine("Customer card with system number '" + sysNum + "' created."); Console.WriteLine("Press enter to update the Customer card..."); Console.ReadLine(); // Update the info of the customer card with systemnumber 'sysNum' // in dossier 'Demo' (created in the previous call). json = "{" + " \"Request\": {" + " \"Customers\": {" + " \"Customer\": [" + " {" + " \"Fields\" : {" + " \"Info\": \"The customer card was brought up to date.\"" + " }" + " }" + " ]" + " }" + " }" + "}"; using (StringContent content = new StringContent(json, Encoding.UTF8, "application/json")) { response = await client.PutAsync("api/Demo/Customer?SystemNumber=" + sysNum, content); } // Display the result. if (!response.IsSuccessStatusCode) Console.WriteLine("Update customer card failed."); else Console.WriteLine("Customer card with system number '" + sysNum + "' updated."); Console.WriteLine("Press enter to delete the customer card..."); Console.ReadLine(); // Delete the customer card with systemnumber 'sysNum' in dossier 'Demo'. response = await client.DeleteAsync("api/Demo/Customer?SystemNumber=" + sysNum); // Display the result. if (!response.IsSuccessStatusCode) Console.WriteLine("Delete customer card failed."); else Console.WriteLine("Customer card with system number '" + sysNum + "' deleted"); }
This example can be compiled in Visual Studio 2010 or later.
Use NuGet Package Manager to install the Json.NET package.
From the Tools menu, select Library Package Manager, then select Package Manager Console. In the Package Manager Console window, type the following command:
Install-Package Newtonsoft.Json
Making a request and processing the answer requires a fair amount of code. To simplify the different requests we'll use the Request
class.
It uses the HttpWebRequest
object internally to send a request and to process the answer.
Imports System.Net Imports System.IO Imports System.Text Imports System.Xml.XPath Module WebConnect Public Class RequestResponse 'The http status code. Public Property StatusCode As HttpStatusCode 'The requested Public Property Message As String End Class Public Class Request Private ReadOnly _request As HttpWebRequest Public Sub New(ByVal method As String, ByVal url As String, ByVal userName As String, ByVal password As String) _request = WebRequest.Create(url) _request.Method = method _request.Credentials = New NetworkCredential(userName, password) _request.Accept = "application/xml" End Sub Function Send(Optional content As String = Nothing, Optional contentType As String = "") As RequestResponse Dim answer As RequestResponse = New RequestResponse() If Not IsNothing(content) Then 'Specify the format of the body. _request.ContentType = contentType 'Add the body text to the request. Dim requestBody As Byte() = Encoding.UTF8.GetBytes(content) _request.ContentLength = requestBody.Length Using stream As Stream = _request.GetRequestStream() stream.Write(requestBody, 0, requestBody.Length) End Using End If Try 'Send the request and get the response. Using response As HttpWebResponse = _request.GetResponse() If Not IsNothing(response) Then answer.StatusCode = response.StatusCode Dim Stream As Stream = response.GetResponseStream() If Not IsNothing(Stream) Then Using reader As StreamReader = New StreamReader(Stream) answer.Message = reader.ReadToEnd() End Using End If Else Console.WriteLine("Request.Send - response = Nothing") End If End Using Catch webEx As WebException Try Using stream As Stream = webEx.Response.GetResponseStream() If Not IsNothing(stream) Then Using reader As StreamReader = New StreamReader(stream) answer.Message = reader.ReadToEnd() End Using End If End Using Dim response = DirectCast(webEx.Response, HttpWebResponse) If Not IsNothing(response) Then answer.StatusCode = response.StatusCode End If Catch ex As Exception Console.WriteLine("Request.Send - exception: " + ex.Message) End Try End Try Return answer End Function End Class End Module
We'll send a few requests and process the answer.
Sub Main() Try Dim username As String = "User" Dim password As String = "Password" 'Get the customer card with number '1' and subnumber '0' from dossier 'Demo'. Dim url As String = "https://ponte.venice.be/WebConnect/api/Demo/Customer?NumberPair=1" & vbTab & "0" Dim request As Request = New Request("GET", url, username, password) Dim response As RequestResponse = request.Send() 'Display the result. If response.StatusCode() <> HttpStatusCode.OK Then Console.WriteLine("Get customer card failed.") Else Using stream As StringReader = New StringReader(response.Message()) Dim xpath As XPathDocument = New XPathDocument(stream) Dim navigator As XPathNavigator = xpath.CreateNavigator() Dim nameNode As XPathNavigator = navigator.SelectSingleNode("Response/Customers/Customer/Fields/Name") If Not IsNothing(nameNode) Then Console.WriteLine("Retrieved customer card '" & nameNode.Value & "'.") End If End Using End If 'Create a new customer card in dossier 'Demo'. Dim json = "{" + " ""Request"": {" + " ""Customers"": {" + " ""Customer"": [" + " {" + " ""Fields"" : {" + " ""Name"": ""My customer NV""," + " ""VatNum"": ""BE 0427.604.308""," + " ""LegalForm"": ""NV""" + " }" + " }" + " ]" + " }" + " }" + "}" url = "https://ponte.venice.be/WebConnect/api/Demo/Customer" request = New Request("POST", url, username, password) response = request.Send(json, "application/json") 'Display the result. If response.StatusCode() <> HttpStatusCode.OK Then Console.WriteLine("Customer post failed.") Else Dim sysNum As String = Nothing Using stream As StringReader = New StringReader(response.Message) Dim xpath As XPathDocument = New XPathDocument(stream) Dim navigator As XPathNavigator = xpath.CreateNavigator() Dim sysNumNode As XPathNavigator = navigator.SelectSingleNode("Response/Customers/Customer/Fields/SysNum") If Not IsNothing(sysNumNode) Then sysNum = sysNumNode.Value End If End Using If IsNothing(sysNum) Then Return End If 'Display the result. Console.WriteLine("Customer card with system number '" & sysNum & "' created.") Console.WriteLine("Press enter to update the Customer card...") Console.ReadLine() 'Update the info of the customer card with systemnumber 'sysNum' 'in dossier 'Demo' (created in the previous call). json = "{" + " ""Request"": {" + " ""Customers"": {" + " ""Customer"": [" + " {" + " ""Fields"" : {" + " ""Info"": ""The customer card was brought up to date.""" + " }" + " }" + " ]" + " }" + " }" + "}" url = "https://ponte.venice.be/WebConnect/api/Demo/Customer?SystemNumber=" & sysNum request = New Request("PUT", url, username, password) response = request.Send(json, "application/json") 'Display the result. If response.StatusCode() <> HttpStatusCode.OK Then Console.WriteLine("Update customer card failed.") Else Console.WriteLine("Customer card with system number '" & sysNum & "' updated.") End If Console.WriteLine("Press enter to delete the customer card...") Console.ReadLine() 'Delete the customer card with systemnumber 'sysNum' in dossier 'Demo'. url = "https://ponte.venice.be/WebConnect/api/Demo/Customer?SystemNumber=" & sysNum request = New Request("DELETE", url, username, password) response = request.Send() 'Display the result. If response.StatusCode() <> HttpStatusCode.OK Then Console.WriteLine("Delete customer card failed.") Else Console.WriteLine("Customer card with system number '" & sysNum & "' deleted.") End If End If Console.WriteLine("Press enter to end the application...") Console.ReadLine() Catch ex As Exception Console.WriteLine("Exception: " + ex.Message) Console.ReadLine() End Try End Sub