如何通过OData 4和WebApi 2.2公开导航属性?

时间:2015-01-20 13:51:40

标签: asp.net-web-api odata

我在模型Site.Locality上有一个导航属性,虽然它的外键是序列化的并且可供消费者使用(Site.LocalityName)但我希望可以从以下位置获得该地点:

~/Site('A')/Locality

如何通过WebApi 2.2在OData v4中完成这项工作?

1 个答案:

答案 0 :(得分:3)

Site实体的控制器上,添加以下操作:

// Implies that the controller has [ODataRoutePrefix("Sites")]

[ODataRoute("({name})/Locality")]
public async Task<Locality> GetLocality([FromODataUri] string name)
{
    // Add try-catch or null 404 handling.

    var site = await this.Repository.GetAsync(new[] { name });

    return site.Locality;
}

显然,将你自己的DAL代码放在那里,这只是一个例子。

很明显,这可以通过控制器上的简单路线和操作来实现。

也就是说,幕后发生了一些映射。例如,您不能公开任何任意导航属性:

[ODataRoute("({name})/Wangachop")]
public string GetWangachop([FromODataUri] string name)
{
    return "Wangaaa!";
}

会屈服:

  

路径模板&#39;网站({name})/ Wangachop&#39;关于行动&#39; GetWangachop&#39;在控制器&#39;网站&#39;不是有效的OData路径模板。找到了一个未解决的路段&#39; Wangachop&#39;在OData路径模板&#39;站点({name})/ Wangachop&#39;。