如何在OnStartProcessingRequest()方法中拦截传入的OData Get Request时获取实体(表)名称? 例如:我想从下面的oData URI
获取MusicCollection和Genre作为实体名称http://dataserver.com/service.svc/MusicCollection[SomeSong]/Genre
答案 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,只需走树即可找到您正在寻找的路径!