我有一个包含分层资源的RESTful Web服务。我想在由全局路由类(global.asax)映射的不同服务类中分离这些资源。例如,如果我有这样的资源层次结构:
Book/
Book/{BookID}/Chapters/
Book/{BookID}/Chapters/{ChapterID}/
etc...
我只能映射到这样一个类:
RouteTable.Routes.Add(new ServiceRoute("Books/", new WebServiceHostFactory()
, typeof(BookService)));
这有效,但我必须在该单一服务中实现所有方法。我更喜欢像BookService,ChapterService等多个服务类......就像这样:
RouteTable.Routes.Add(new ServiceRoute("Books/", new WebServiceHostFactory()
, typeof(BookService)));
RouteTable.Routes.Add(new ServiceRoute("Books/{BookID}/Chapters/"
, new WebServiceHostFactory(), typeof(ChapterService)));
但它不起作用......所以现在我被迫在一个服务中定义了我的所有方法。有没有办法解决这个问题,还是我注定要使用这个庞大的服务类?
答案 0 :(得分:1)
看看this answer。它与使用ASP.NET Web API进行路由有关(一些评论建议使用,我也会这样做),但它也与开发RESTful API有关。我不会尝试在API中显示您的架构的层次结构,因为我认为它增加了很多不必要的复杂性。因此,API的示例如下所示:
/Chapters/{ChapterID}?Book={BookID}
这消除了复杂的路由,API用户更容易理解,并坚持使用RESTful原则。