从WCF数据服务请求中获取实体名称

时间:2013-03-01 03:15:35

标签: wcf-data-services

如何在OnStartProcessingRequest()方法中拦截传入的OData Get Request时获取实体(表)名称? 例如:我想从下面的oData URI

获取MusicCollection和Genre作为实体名称

http://dataserver.com/service.svc/MusicCollection[SomeSong]/Genre

1 个答案:

答案 0 :(得分:1)

这是OdataUriParser的完美用法!正如我们所说,它处于主动,增量和开发阶段,目前可以使用过滤器和orderby解析器,并且在完成开发时还会有更多。我们还没有发布解析器的一部分,它将处理你的特定场景(它仍在积极开发中),但是有一个实验版本(正式版本基于它),你可以在同一时间使用。在这里查看OData contrib库:http://nuget.org/packages/Microsoft.Data.OData.Contrib。具体来说,这样的事情:

  Uri requestUri  = new Uri("http://dataserver.com/service.svc/MusicCollection(SomeSong)/Genre");
  Uri baseUri = new Uri("http://dataserver.com/service.svc/")
  SyntacticTree parsedUri = SyntacticTree.ParseUri(requestUri, baseUri);

生成的SyntacticTree会将您的uri分解为QueryTokens,只需走树即可找到您正在寻找的路径!