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