Introduction

In this article you learn about Self-Host, how we can Self-Host the ASP.NET Web API. In this article, you don't have need of the IIS server. We Host the Web API in a Console application.

Step 1

First we create the console application.

Step 2

Set the ".Net Framework 4".

Step 3

We check that the Nuget Package Manager is installed or not.

For installation of "Nuget Package Manager":

Step 4

Now we install the Web API Self-Host Package.

Step 5

Create the Model class:

Add this code in the "Item" Class:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Hosting
  7. {
  8. public class Item
  9. {
  10. public int Id { get; set; }
  11. public string Name { get; set; }
  12. public string Category { get; set; }
  13. }
  14. }

Step 6

To add a Controller class:

Add this code in the "ItemsController" class:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Net;
  5. using System.Text;
  6. using System.Web.Http;
  7. namespace Hosting
  8. {
  9. public class ItemsController : ApiController
  10. {
  11. Item[] items = new Item[]
  12. {
  13. new Item { Id = 1, Name = "Apple", Category = "Fruit" },
  14. new Item{ Id = 2, Name = "Tomato", Category = "vasitable" },
  15. new Item{ Id = 3, Name = "T-Shirt", Category = "cloths" }
  16. };
  17. public IEnumerable<Item> GetAllItems()
  18. {
  19. return items;
  20. }
  21. public Item GetItemById(int id)
  22. {
  23. var item = items.FirstOrDefault((i) => i.Id == id);
  24. if (item == null)
  25. {
  26. throw new HttpResponseException(HttpStatusCode.NotFound);
  27. }
  28. return item;
  29. }
  30. public IEnumerable<Item> GetItemsByCategory(string category)
  31. {
  32. return items.Where(i => string.Equals(i.Category, category,
  33. StringComparison.OrdinalIgnoreCase));
  34. }
  35. }
  36. }

Step 7

Now we Host our Web API.

Open the "Program.cs" file and add this code into this file:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Web.Http;
  7. using System.Web.Http.SelfHost;
  8. namespace Hosting
  9. {
  10. class Program
  11. {
  12. static void Main(string[] args)
  13. {
  14. var config = new HttpSelfHostConfiguration("http://localhost:8080");
  15. config.Routes.MapHttpRoute(
  16. "API Default", "api/{controller}/{id}",
  17. new { id = RouteParameter.Optional });
  18. using (HttpSelfHostServer server = new HttpSelfHostServer(config))
  19. {
  20. server.OpenAsync().Wait();
  21. Console.WriteLine("Press Enter to quit.");
  22. Console.ReadLine();
  23. }
  24. }
  25. }
  26. }

Step 8

Add a new project in this application using the following:

Step 9

Install the "Microsoft ASP.NET Web API Client Library" using the following:

Step 10

Add the reference of the client to the "Hosting" project using the following:

Step 11

Open the "Program.cs" file in the "Client" project.

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Net.Http;
  7. namespace Client
  8. {
  9. class Program
  10. {
  11. static HttpClient client = new HttpClient();
  12. static void Main(string[] args)
  13. {
  14. client.BaseAddress = new Uri("http://localhost:8080");
  15. ListAllItems();
  16. ListItem(1);
  17. ListItems("fruit");
  18. Console.WriteLine("Press Enter to quit.");
  19. Console.ReadLine();
  20. }
  21. static void ListAllItems()
  22. {
  23. HttpResponseMessage resp = client.GetAsync("api/items").Result;
  24. //resp.EnsureSuccessStatusCode();
  25. var items = resp.Content.ReadAsAsync<IEnumerable<Hosting.Item>>().Result;
  26. foreach (var i in items)
  27. {
  28. Console.WriteLine("{0} {1} {2}", i.Id, i.Name, i.Category);
  29. }
  30. }
  31. static void ListItem(int id)
  32. {
  33. var resp = client.GetAsync(string.Format("api/products/{0}", id)).Result;
  34. //resp.EnsureSuccessStatusCode();
  35. var item = resp.Content.ReadAsAsync<Hosting.Item>().Result;
  36. Console.WriteLine("ID {0}: {1}", id, item.Name);
  37. }
  38. static void ListItems(string category)
  39. {
  40. Console.WriteLine("items in '{0}':", category);
  41. string query = string.Format("api/items?category={0}", category);
  42. var resp = client.GetAsync(query).Result;
  43. resp.EnsureSuccessStatusCode();
  44. var items = resp.Content.ReadAsAsync<IEnumerable<Hosting.Item>>().Result;
  45. foreach (var item in items)
  46. {
  47. Console.WriteLine(item.Name);
  48. }
  49. }
  50. }
  51. }

Step 12

Now execute the application.

Step 13

Debug the project "Hosting" using the following:

Output

shost12.jpg