我在模型Site.Locality
上有一个导航属性,虽然它的外键是序列化的并且可供消费者使用(Site.LocalityName
)但我希望可以从以下位置获得该地点:
~/Site('A')/Locality
如何通过WebApi 2.2在OData v4中完成这项工作?
答案 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;。