2012-07-30 27 views
1

我有一个包含分层资源的RESTful Web服务。我想在全局路由类(global.asax)映射的不同服务类中分离这些资​​源。举例来说,如果我有一个这样的资源层次:使用分层资源在WCF REST中路由

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

但它不工作...所以现在我不得不在定义我的所有的方法一项服务。有没有办法解决这个问题,或者我注定要使用这个庞大的服务类?

+1

有没有考虑切换到ASP.NET MVC4 Web API?它更适合于REST风格的Web服务,因为它主要针对这一点。 – Martin1921 2012-07-30 13:02:35

+0

这可能是我必须要做的......谢谢你的答案! – 2012-07-30 13:32:01

+0

我不认为你必须这样做,但这是我建议你做的。 :)你是否试图扭转路线,首先增加更深的路线? – Martin1921 2012-07-30 13:59:21

回答

1

看看this answer。它与使用ASP.NET Web API的路由有关(一些评论建议使用,我也会这样做),但它也涉及到开发RESTful API的一般情况。我不会试图在API中显示模式的层次结构,因为我认为它增加了许多不必要的复杂性。因此,对于你的API例子是这个样子:

/Chapters/{ChapterID}?Book={BookID} 

这消除了复杂的路由,更容易API用户理解,并与基于REST的原则棒。

+0

我不同意“API用户更容易理解”。我认为这很难理解,特别是当你有几个子集合时。 – Martin1921 2012-07-30 15:07:59

+0

@ Martin1921然后我们同意不同意。我说这更容易理解,因为它是大多数其他REST API和OData服务使用的惯例[http://www.odata.org/media/30002/OData.html#queryingcollections]。 – 2012-07-30 15:43:20

+0

这对我很好。 :)但出于好奇,在哪一部分,你发现一个类似于这里描述的语法?我在10.2.3下找不到任何东西。 – Martin1921 2012-07-30 15:49:09