Understanding ASP.NET Web API Concepts

ASP.NET Web API is a framework for building HTTP services that can be accessed from a wide variety of clients, including browsers and mobile devices. It allows you to easily expose your data and services over the web using the familiar .NET development model.

What is ASP.NET Web API?

ASP.NET Web API enables you to build RESTful HTTP services. REST (Representational State Transfer) is an architectural style that leverages the HTTP protocol to create distributed systems. Web API is a lightweight framework that's ideal for:

  • Exposing data to web browsers and mobile applications.
  • Building back-end services for single-page applications (SPAs).
  • Creating microservices.
  • Integrating with other web services.

Key Concepts

Controllers

Controllers are the core of your Web API application. They are classes that handle incoming HTTP requests and return HTTP responses. Controllers are typically derived from ApiController.


using System.Web.Http;

public class ProductsController : ApiController
{
    // GET api/products
    public IEnumerable<string> Get()
    {
        return new string[] { "Product 1", "Product 2" };
    }

    // GET api/products/5
    public string Get(int id)
    {
        return "Product " + id;
    }
}
                

Routing

Routing maps incoming HTTP requests to specific controller actions. Web API uses a convention-based routing system that is similar to MVC.

By default, routes are defined in the WebApiConfig.cs file:


using System.Web.Http;

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}
                

HTTP Verbs and Actions

Web API actions in controllers are mapped to HTTP verbs (GET, POST, PUT, DELETE). The framework can infer the HTTP verb based on the method name (e.g., Get maps to GET, Post maps to POST).

  • GET: Retrieves a resource.
  • POST: Creates a new resource.
  • PUT: Updates an existing resource.
  • DELETE: Deletes a resource.
  • PATCH: Partially updates an existing resource.

Model Binding

Model binding is the process of taking incoming request data (like form data, route data, or query string parameters) and creating a .NET object that can be used within your controller action. Web API supports various model binders, including:

  • FormDataModelBinder for form data.
  • QueryStringModelBinder for query string parameters.
  • RouteDataModelBinder for route parameters.

HTTP Message Handlers

HTTP message handlers allow you to intercept and process HTTP requests and responses before they reach the controller or after the controller has processed them. This is useful for tasks like logging, authentication, and caching.

Benefits of ASP.NET Web API

  • Unified Programming Model: Builds on the familiar ASP.NET MVC patterns.
  • Lightweight: Designed for building HTTP services without the overhead of other frameworks.
  • Cross-Platform: Supports a wide range of clients, including browsers, mobile apps, and other servers.
  • RESTful: Encourages the design of services that adhere to REST principles.
  • Extensible: Highly customizable through middleware and message handlers.

Getting Started

To start building with ASP.NET Web API, you typically create a new ASP.NET Web Application project in Visual Studio and select the "Web API" template. This template provides a basic structure with necessary configurations and example controllers.

Example: Creating a simple GET endpoint

Let's create a basic service to return a list of books.


using System.Collections.Generic;
using System.Web.Http;

public class BooksController : ApiController
{
    private static List<Book> _books = new List<Book>
    {
        new Book { Id = 1, Title = "The Hitchhiker's Guide to the Galaxy", Author = "Douglas Adams" },
        new Book { Id = 2, Title = "Pride and Prejudice", Author = "Jane Austen" }
    };

    // GET api/books
    public IEnumerable<Book> Get()
    {
        return _books;
    }

    // GET api/books/1
    public Book Get(int id)
    {
        return _books.FirstOrDefault(b => b.Id == id);
    }
}

public class Book
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Author { get; set; }
}
                

When you navigate to /api/books in your browser, you will receive a JSON or XML representation of the books list, depending on the client's Accept header.

Further Reading