How to Self Host a Web API Application
In this article we will see how to how to Self Host a Web API Application. We can host a WEB API in IIS/Windows applications or even a console based application. In this article we will self host the Web API application in its own host process in a console based application.
In this article we will see how to how to Self Host a Web API Application.
We can host a WEB API in IIS/Windows applications or even a console based application. In this article we will self host the Web API application in its own host process.
Step1:
Launch Visual Studio 2012 -> File -> New -> Project -> On the Left Side of open dialog box Select Installed ->Templates -> Visual C# -> Console Application-> Name : "SelfHostWebAPIDemo".
Step2:
Since ours is a console application, We need to add Web API assemblies using NuGet Package Manager. If you are new to creating Web API, First you need to download and install it using below process.
Go To Tools -> Extenstions and Updates -> Select Online on Left hand side -> type "nuget" in the search box -> Select the NuGet Package Manager -> click Download -> Install.
This install Nuget Package Manager.
Step3:
Right click the project in solution explorer -> click Manage Nuget Packages -> In the Manage NuGet Packages window -> in the search box type self host -> This lists the self host packages -> select ASP.NET Web API Self Host -> click on Install -> Accept the License Agreement -> Click on close.
Step4:Add a Model to the project
Add a class "Emp" to the project as shown below:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace SelfHostWebAPIDemo
{
public class Emp
{
public int EmpId { get; set; }
public string Name { get; set; }
public decimal Salary { get; set; }
}
}
Step5:Add a Controller to the project
Add a class "EmpController" to the project and add the "using System.Web.Http;
" and "using System.Net" at the top of the class. Derive this class from the ApiController class as shown below:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
namespace SelfHostWebAPIDemo
{
public class EmpController : ApiController
{
List
Emp[] Emps = new Emp[]
{
new Emp { EmpId = 1, Name = "Srihita", Salary = 10000,Gender="Male" },
new Emp { EmpId = 2, Name = "Krishna", Salary = 25000,Gender="Male" },
new Emp { EmpId = 3, Name = "John", Salary = 48000,Gender="Female" }
};
public IEnumerable
{
return Emps;
}
public Emp GetEmpById(int id)
{
var Emp = Emps.FirstOrDefault((e) => e.EmpId == id);
if (Emp == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return Emp;
}
public IEnumerable
{
return Emps.Where(s => string.Equals(s.Gender, gender,
StringComparison.OrdinalIgnoreCase));
}
}
}
In the above code we have written below three methods:
GetAllEmps: returns all the Employee details.
GetEmpById: returns a specific Employee with an id passed as parameter to this class.
GetEmpsByGender: Returns list of Employees with matching Gender same as the parameter passed to this method.
Step 6:Host the Web API in the console application
In the Program class add the following using statements
using System.Web.Http;
using System.Web.Http.SelfHost;
Add the following code to the Program class.
static void Main(string[] args)
{
var config = new HttpSelfHostConfiguration("http://localhost:8999");
//Maps the specified route template(api/controller/id)
config.Routes.MapHttpRoute("default", "api/{controller}/{id}", new { id = RouteParameter.Optional });
var server = new HttpSelfHostServer(config);
var task = server.OpenAsync();
task.Wait();
Console.WriteLine("server is up and running");
//to keep the console application up and available
Console.ReadLine();
}
Step7: Creating a console application which will be the client application to call the Web API
In the Solution Explorer ->Right click the solution -> Add New Project -> Visual C# -> Console Application -> Name:ClientApplication -. OK
Step 8:Now we need to add "ASP.NET Web API Client Libraries" to the client project using NuGet Package Manager.
Right Click ClientApplication project in the Solution Explorer -> Select Manage NuGet Packages -> Select Online on the left and on the right type "Microsoft.AspNet.WebApi.Client" in the search box -> Select the Microsoft ASP.NET Web API Client Libraries package and click Install ->Accept License Agreement -> Close
Step 9:Add reference to the SelfHost Web API project in the Client Application
In Solution Explorer->Right-click the ClientApplication project-> Add Reference->
In the Reference Manager dialog, under Solution, select Projects.
Select the SelfHostWebAPIDemo project -> Click OK.
Step 10:Calling Web API methods
Add using System.Net.Http; at the top of the Program.cs class of the Client Application. Create a HttpClient instance and add code to list all employees, list an employee by ID, and list employees by gender as shown below:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
namespace ClientApplication
{
class Program
{
static HttpClient client = new HttpClient();
static void Main(string[] args)
{
//connect to the server hosted on the uri mentioned in the Uri instance
client.BaseAddress = new Uri("http://localhost:8999");
GetAllEmployees();
GetEmployee(1);
GetEmployees("Female");
Console.WriteLine("Press Enter to quit.");
Console.ReadLine();
}
//Gets all the employee details and displays on the console window.
static void GetAllEmployees()
{
HttpResponseMessage resp = client.GetAsync("api/Emp").Result;
resp.EnsureSuccessStatusCode();
var employees = resp.Content.ReadAsAsync
foreach (var e in employees)
{
Console.WriteLine("{0} {1} {2} {3}", e.EmpId, e.Name, e.Salary, e.Gender);
}
}
//Gets employee details with a specific employee id and displays on the console window.
static void GetEmployee(int id)
{
var resp = client.GetAsync(string.Format("api/Emp/{0}", id)).Result;
resp.EnsureSuccessStatusCode();
var emp = resp.Content.ReadAsAsync
Console.WriteLine("ID : {0} with Name : {1}", id, emp.Name);
}
//Gets employees with gender matching the parameter value and displays on the console window.
static void GetEmployees(string gender)
{
Console.WriteLine("{0} employee", gender);
string query = string.Format("api/emp?gender={0}", gender);
var resp = client.GetAsync(query).Result;
resp.EnsureSuccessStatusCode();
var emps = resp.Content.ReadAsAsync
foreach (var emp in emps)
{
Console.WriteLine(emp.Name);
}
}
}
}
Step 11:Run the Web-API Server application
Make the "SelfHostWebAPIDemo" project as the start up project and Press Ctrl +F5 to run the server. This makes our web api up and running. The output is as shown below:
Step 12:Run the Client Application
Right click the "ClientApplication" project -> debug -> start new instance. Now the application will connect to the web-api server applications and gets the data and displays the output as shown below:
Please make sure you run Visual Studio as an administrator.
Nice Article.