Настройка маршрутов в web api (asp.net, c#)

В web api контроллере можно создавать методы Get, Post, Put, Delete которые соответствуют запросам по названию. Это позволяет обращаться к этим методам посредством только наименования контроллера. А если создать другие методы (например GetSomething, DeleteSomething или PerformSomething), то будут конфликты при обращении к этим методам. Настроим маршруты так чтоб не было никаких конфликтов.

context.Routes.MapHttpRoute(
    name: "ApiAction",
    routeTemplate: "api/{controller}/{action}/{recordId}",
    defaults: new { recordId = RouteParameter.Optional },
    constraints: new
    {
        action = new RegexRouteConstraint(@"(Get|Post|Put|Delete).+|[a-zA-Z]+[a-zA-Z0-9]*")
    }
);
context.Routes.MapHttpRoute(
    name: "ApiGet",
    routeTemplate: "api/{controller}/{recordId}",
    defaults: new { action = "Get", recordId = RouteParameter.Optional },
    constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
context.Routes.MapHttpRoute(
    name: "ApiPost",
    routeTemplate: "api/{controller}/{recordId}",
    defaults: new { action = "Post", recordId = RouteParameter.Optional },
    constraints: new { httpMethod = new HttpMethodConstraint("POST") }
);
context.Routes.MapHttpRoute(
    name: "ApiPut",
    routeTemplate: "api/{controller}/{recordId}",
    defaults: new { action = "Put", recordId = RouteParameter.Optional },
    constraints: new { httpMethod = new HttpMethodConstraint("PUT") }
);
context.Routes.MapHttpRoute(
    name: "ApiDelete",
    routeTemplate: "api/{controller}/{recordId}",
    defaults: new { action = "Delete", recordId = RouteParameter.Optional   },
    constraints: new { httpMethod = new HttpMethodConstraint("DELETE") }
);

Теперь в контроллере могут совместно существовать методы Get, Post, Put, Delete, GetSomething, DeleteSomething и PerformSomething