Search code examples
c#asp.netasp.net-web-apiroutesasp.net-mvc-5

Routing in ASP NET Web API - For different versions of an API


I am reading about Attribute Routing in Web API 2 from here

The article says,

Here are some other patterns that attribute routing makes easy.

API versioning

In this example, “/api/v1/products” would be routed to a different controller than “/api/v2/products”.

/api/v1/products
/api/v2/products

How come?

EDIT: I would do this in Normal Routing:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
         config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/v2/products",
            defaults: new { controller = V2_Products }
        );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/v1/products",
            defaults: new { controller = V1_Products }
        );
    }
}

Could anyone explain me how to do this in Attribute Routing way ? And how come using Attribute routing is easier and convenient for this example (according to the article) ?


Solution

  • There are many ways to implement versionning with attribute routing ; A really basic way is to use RoutePrefix attribute for each version of your ApiController

    [RoutePrefix("v1")]
    public class V1_ProductsController : ApiController
    {
        [Route("products")]
        public IEnumerable<string> Get()
        {
            return new string[] { "v1-product1", "v1-product2" };
        }
         //....
    }
    
    
    [RoutePrefix("v2")]
    public class V2_ProductsController : ApiController
    {
         [Route("products")]
        public IEnumerable<string> Get()
        {
            return new string[] { "v2-product1", "v2-product2" };
        }
        //....
    }
    

    /v1/products goes to the first version of /v2/products goes to the second one.