Consume Web API in a .NET C# client
December 19, 2013 3 Comments
Recently I have written a console client in C# to consume those web services developed in my previous post by using APS.NET Web API 2 and Microsoft Entity Framework 6.
I started with a new Console Application (called WebApiClient) in C# in Visual Studio 2013, and then installed the Microsoft ASP.NET Web API Class Libraries using NuGet. Lastly, I added Employee.cs (model class) which was used by web services as my data structure.
The following is a web client program in C# (Program.cs):
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Http; using System.Net.Http.Headers; namespace WebApiClient { class Program { static void Main(string[] args) { HttpClient client = new HttpClient(); string baseUrl = "http://localhost:55142"; client.BaseAddress = new Uri(baseUrl); // Add an Accept header for JSON format. client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); //New Employee Record URL int anEmpId = -1; string serviceUrl; // 1. Post a new employee serviceUrl="api/employee"; Console.WriteLine("1. Add an employee by sending POST {0}/{1} \r\n", baseUrl, serviceUrl); Console.WriteLine("The following new employee is added \r\n"); var anEmployee = new Employee() { lastname = "Smith", firstname = "Adam", title = "Economist", titleofcourtesy = "Dr.", birthdate = Convert.ToDateTime("1958-12-05 "), hiredate = Convert.ToDateTime("1990-01-01"), address = "188 Bay Street", city = "London", region = "", postalcode = "A1B 2Z3", country = "UK", phone = "(71) 234-8228", mgrid = 1}; HttpResponseMessage response = client.PostAsJsonAsync(serviceUrl, anEmployee).Result; if (response.IsSuccessStatusCode) { // display the new employee Console.WriteLine("firstname={0}", anEmployee.firstname); Console.WriteLine("lastname={0}", anEmployee.lastname); } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } Console.WriteLine("\r\nCheck your database table. Press any key to continue...\r\n"); Console.ReadKey(); // 2. Get all employees. serviceUrl="api/employee"; Console.WriteLine("2. Get All Employee by sending GET {0}/{1} \r\n", baseUrl, serviceUrl); response = client.GetAsync(serviceUrl).Result; // Blocking call! if (response.IsSuccessStatusCode) { // Parse the response body. Blocking! var employees = response.Content.ReadAsAsync<IEnumerable<Employee>>().Result; foreach (var e in employees) { if (e.firstname.Equals("Adam") & e.lastname.Equals("Smith")) { anEmpId = e.empid; Console.ForegroundColor = ConsoleColor.Red; Console.WriteLine("{0};\t{1};\t{2};\t{3}", e.empid, e.firstname, e.lastname, e.title); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("\r\nThe new employee is with empid={0}\r\n", anEmpId); Console.ForegroundColor = ConsoleColor.Gray; } else { Console.WriteLine("{0};\t{1};\t{2};\t{3}", e.empid, e.firstname, e.lastname, e.title); } } } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } Console.WriteLine("\r\nPress any key to continue...\r\n"); Console.ReadKey(); // 3. Get an employee by empid if (anEmpId>0) { serviceUrl = "api/employee/" + anEmpId.ToString(); } else { serviceUrl = "api/employee/1"; anEmpId = 1; } Console.WriteLine("3. Get the employee with empid={0} by sending GET {1}/{2} \r\n", anEmpId, baseUrl, serviceUrl); response = client.GetAsync(serviceUrl).Result; // Blocking call! if (response.IsSuccessStatusCode) { // Parse the response body. Blocking! var a_employee = response.Content.ReadAsAsync<Employee>().Result; Console.WriteLine("emid={0}", a_employee.empid); Console.WriteLine("FirstName={0}", a_employee.firstname); Console.WriteLine("LastName={0}", a_employee.lastname); Console.WriteLine("Title={0}", a_employee.title); } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } Console.WriteLine("\r\nPress any key to continue...\r\n"); Console.ReadKey(); // 4. Update an employee by empid Console.WriteLine("4. Update an employee with empid = {0} by sending PUT {1}/{2} \r\n", anEmpId, baseUrl, serviceUrl); response = client.GetAsync(serviceUrl).Result; // Blocking call! if (response.IsSuccessStatusCode) { // Retrieve the record first var a_employee = response.Content.ReadAsAsync<Employee>().Result; Console.WriteLine("The record is retrieved before update: \r\n"); Console.WriteLine("emid={0}", a_employee.empid); Console.WriteLine("FirstName={0}", a_employee.firstname); Console.WriteLine("LastName={0}", a_employee.lastname); Console.WriteLine("Title={0}", a_employee.title); // Update the tile field of the record a_employee.title = "Senior Economist"; response = client.PutAsJsonAsync(serviceUrl, a_employee).Result; if (response.IsSuccessStatusCode) { Console.WriteLine("\r\nThe record with empid={0} was updated with the following: \r\n", anEmpId); Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("Title={0}", a_employee.title); Console.ForegroundColor = ConsoleColor.Gray; } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } Console.WriteLine("\r\nCheck your database table. Press any key to continue...\r\n"); Console.ReadKey(); // 5. delete an employee added in step 1 Console.WriteLine("4. Delete an employee with empid = {0} by sending DELETE {1}/{2} \r\n", anEmpId, baseUrl, serviceUrl); response = client.DeleteAsync(serviceUrl).Result; if (response.IsSuccessStatusCode) { Console.ForegroundColor = ConsoleColor.Yellow; Console.WriteLine("The record with empid={0} was deleted.", anEmpId); Console.ForegroundColor = ConsoleColor.Gray; } else { Console.WriteLine("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase); } Console.WriteLine("\r\nCheck your database table.\r\n"); } } }