ASP.NET Web API pobiera listę podrzędną (zasoby hierarchiczne)

Mam następujący schemat odpoczynku, który chciałbym zaimplementować za pomocą ASP.NET Web Api:

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

Pierwsze dwa łącza działają poprawnie przy użyciu ApiController i dwóch następujących metod:

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

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

W tym samym kontrolerze (czy potrzebuję innego kontrolera o nazwie ClassesController?), W jaki sposób zaimplementować dwa ostatnie łącza? Jak wyglądałby routing dla części „klas” (jeśli to konieczne)?

Oto mój WebApiConfig (który chciałbym zachować jako dynamiczny, a nie kodować trasę do / klas, jeśli to możliwe:

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 }
);   

EDIT Oto mój nowo utworzony kontroler Classes:

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

Przy próbie przejścia na ten adres URL otrzymuję 404 błędów:

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

questionAnswers(2)

yourAnswerToTheQuestion