ASP.NET Web API obtener lista secundaria (recursos jerárquicos)

Tengo el siguiente esquema de descanso que me gustaría implementar utilizando la API de ASP.NET Web:

http://mydomain/api/students
http://mydomain/api/students/s123
http://mydomain/api/students/s123/classes
http://mydomain/api/students/s123/classes/c456

Tengo los dos primeros enlaces funcionando correctamente usando ApiController y los dos métodos siguientes:

public class StudentsController : ApiController {
  // GET api/students
  public IEnumerable<Student> GetStudents() {  
  }

  // GET api/students/5
  public IEnumerable<Student> GetStudent(string id) {  
  }
}

En este mismo controlador, (o ¿necesito un controlador diferente llamado ClassesController?), ¿Cómo implementaría los dos últimos enlaces? Además, ¿cómo se vería el enrutamiento de la parte de 'clases' (si es necesario)?

Aquí está mi WebApiConfig (que me gustaría mantener como dinámico, en lugar de codificar la ruta a las clases / si es posible:

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

// EDIT - I'm getting 404's when trying to use this
context.Routes.MapHttpRoute(
  name: "JobsApi",
  routeTemplate: this.AreaName + "/Students/{id}/Classes/{classId}",
  defaults: new { classId = RouteParameter.Optional }
);   

EDITAR Aquí está mi recién creado ClassesController:

public class ClassesController : ApiController {
  // GET api/classes
  public IEnumerable<TheClass> Get(string id) {    
      return null;
  }
}

Recibo errores 404 al intentar ir a esta URL:

http://mydomain/api/students/s123/classes

Respuestas a la pregunta(2)

Su respuesta a la pregunta