我想发送这样的请求:
/odata.svc/Pages(ItemId=27,PublicationId=1)
这是我正在使用的代码:
CdService.ContentDeliveryService cdService = new ContentDeliveryService(new Uri("http://xxx.xx:81/odata.svc"));
var pages = cdService.Pages;
pages = pages.AddQueryOption("ItemId", "270");
pages = pages.AddQueryOption("PublicationId", "2");
var result = pages.Execute();
我的问题是这段代码发送的请求是这样的:
/odata.svc/Pages()?ItemId=270&PublicationId=2
这个请求的问题在于它返回了我所有的页面,而不仅仅是我需要的页面。
我可以使用LINQ:
result.Single(page => page.ItemId == 27 && page.PublicationId == 1);
但问题是所有页面仍将通过网络发送
答案 0 :(得分:1)
你可以试试这个:
EntityDescriptor entityDescriptor = service.Entities.Where(c =>
c.Entity is CDService.Page
&& ((CDService.Page)c.Entity).ItemId == pageId.ItemId
&& ((CDService.Page)c.Entity).PublicationId == pageId.PublicationId)
.FirstOrDefault();
if (entityDescriptor != null)
{
return (CDService.Page)entityDescriptor.Entity;
}
答案 1 :(得分:1)
我找到了一个解决方案,虽然不是很好:
ContentDeliveryService cdService1
= new ContentDeliveryService(new Uri("http://xxx.xx:81/odata.svc"));
var page = cdService1.Execute<Page>(
new Uri("http://xxx.xx:81/odata.svc/Pages(ItemId=27,PublicationId=1)"));
答案 2 :(得分:1)
我已经使用LINQ进行了快速测试,似乎正在进行正确的查询:
ContentDeliveryService.ContentDeliveryService service =
new ContentDeliveryService.ContentDeliveryService(new Uri("http://localhost:99/odata.svc"));
var page = from x in service.Pages
where x.ItemId == 2122
&& x.PublicationId == 16
select x;
foreach (var page1 in page)
{
Console.WriteLine(page1.Title);
}
Console.Read();