我试图找到一个如何正确实例化ODataNavigationLink的示例,以防它非空。我发现的唯一代码示例创建了一个非扩展链接,但没有将其绑定到任何数据:
//create a non-expanded link for the orders navigation property
writer.WriteStart(new ODataNavigationLink()
{
IsCollection = true,
Name = "Orders",
Url = new Uri("http://microsoft.com/Customer(" +
dataSource.Customers.First().CustomerID + ")/Orders")
});
writer.WriteEnd(); //ends the orders link
所以在这里我们指定了" Orders"的链接。但是,我如何提供链接的实际值(在此示例中,链接是一个集合,但它也可以是单个条目)。当我手动编写有效负载时,我正在提供" href"具有链接条目ID的属性。我无法弄清楚ODataLib是如何完成的。
答案 0 :(得分:1)
'href'属性中显示的值只显示ODataNavigationLink的Url属性,因此您可以尝试以下代码手动设置它:
//create a non-expanded link for the orders navigation property
writer.WriteStart(new ODataNavigationLink() {
IsCollection = true,
Name = "Orders",
Url = new Uri("http://microsoft.com/Orders(3)") });
writer.WriteEnd(); //ends the orders link
通常,导航链接应该是导航属性后面的源实体网址,请参阅here,而id应指向实际条目ID。
<强>更新强>
根据最新的反馈,您正在尝试编写atom spec第14.1节中所述的“链接集合”。因此,您可以尝试ODataEntityReferenceLinks类:
var referenceLink1 = new ODataEntityReferenceLink { Url = new Uri("http://host/Orders(1)") };
var referenceLink2 = new ODataEntityReferenceLink { Url = new Uri("http://host/Orders(2)") };
var referenceLink3 = new ODataEntityReferenceLink { Url = new Uri("http://host/Orders(3)") };
var referenceLinks = new ODataEntityReferenceLinks
{
Links = new[] { referenceLink1, referenceLink2, referenceLink3 }
};
writer.WriteEntityReferenceLinks(referenceLinks);
并且有效负载将类似于:
<links xmlns="http://schemas.microsoft.com/ado/2007/08/dataservices">
<uri>http://host/Orders(1)</uri>
<uri>http://host/Orders(2)</uri>
<uri>http://host/Orders(3)</uri>
</links>