让我在开始之前说我是OData的新手,并且找不到任何人在做我要解释的事情。我们需要将应用程序从2层移植到3层,并且我们的其他旧版应用程序为此使用.NET Remoting ...(最终也将需要进行此升级。)嗯,我们打算使用WCF,但是Microsoft似乎已经已经放弃了对OData的支持...所以就在这里。带有Web Api 2.2的OData V4。简而言之,我很难在客户端形成正确的路由。
在Fiddler中,我可以通过Uri访问OData服务:
http://localhost:port/odata/Templates?templateName='MyTemplate'&$expand=Items
它确实以我期望的方式带回了我选择的模板对象。
使用Microsoft为该版本的OData服务构建的代码生成客户端,我无法强制代理服务生成上述Uri。调试时,我发现可以构成Uri的最好方法是:
http://localhost:port/odata/Templates('MyTemplate')?$expand=Items
,但是如果您以这种方式实现请求,则返回404找不到。
我创建上面格式错误的路由的C#代码如下:
string serviceUri = "http://localhost:port/odata/"; var container = new Default.Container( new Uri( serviceUri ) ); var dictLookup = new Dictionary<string, object>() {{"TemplateName", "MyTemplate"}}; var result = container.Templates.ByKey( dictLookup ).Expand("Items");
我已经找到并尝试使用DataServiceContext(容器)中的方法.AppendRequestUri(“ templateName ='MyTemplate'),但是无论我将其放在什么参数中,这似乎都不会改变服务的RequestUri。>
问题是如何在客户端应用程序(DataServiceContext)中获取代码生成的容器以形成Uri,如下所示:
http://localhost:port/odata/Templates?templateName='MyTemplate'&$expand=Items
任何人对此的回应将不胜感激。
肯特