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

问题描述:

如何在拦截OnStartProcessingRequest()方法中的传入OData获取请求时获取实体(表格)名称? 例如:我想从以下的OData URI从WCF数据服务请求中获取实体名称

http://dataserver.com/service.svc/MusicCollection[SomeSong]/Genre得到MusicCollection和流派实体名称

这是OdataUriParser一个完美的使用!当我们说话时,它处于积极的,渐进式的发展中,目前有过滤器和orderby解析器可供使用,并且在我们完成开发时还会有更多。我们还没有发布解析器的部分,它将处理您的具体情况(它仍处于积极的开发阶段),但是有一个实验版本(正式版本基于此)可以同时使用。看看这里的OData贡献库: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,只是走的树,找到正在寻找的路径!