Enrutamiento de la API web: api / {controller} / {action} / {id} “disfunciones” api / {controller} / {id}

Tengo la ruta por defecto en Global.asax:

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

Quería poder apuntar a una función específica, así que creé otra ruta:

RouteTable.Routes.MapHttpRoute(
         name: "WithActionApi",
         routeTemplate: "api/{controller}/{action}/{id}",
         defaults: new { id = System.Web.Http.RouteParameter.Optional }
         );

Entonces, en mi controlador, tengo:

    public string Get(int id)
    {
        return "object of id id";
    }        

    [HttpGet]
    public IEnumerable<string> ByCategoryId(int id)
    {
        return new string[] { "byCategory1", "byCategory2" };
    }

Vocación.../api/records/bycategoryid/5 me dara lo que quiero Sin embargo, llamando.../api/records/1 me dará el error

Se encontraron múltiples acciones que coinciden con la solicitud: ...

Entiendo por qué es eso: las rutas solo definen qué URL son válidas, pero cuando se trata de la coincidencia de funciones, ambasGet(int id) yByCategoryId(int id) partidoapi/{controller}/{id}, Que es queconfunde el marco.

¿Qué debo hacer para que la ruta API predeterminada funcione de nuevo y mantener la ruta con la API?{action}? Pensé en crear un controlador diferente llamadoRecordByCategoryIdController para que coincida con la ruta API predeterminada, para la que solicitaría.../api/recordbycategoryid/5. Sin embargo, me parece que es una solución "sucia" (por lo tanto insatisfactoria). He buscado respuestas sobre esto y no hay tutorial sobre cómo usar una ruta con{action} Incluso menciona este problema.

Respuestas a la pregunta(4)

Su respuesta a la pregunta