我有一个有效的OData实现,其路由设置采用典型方式:
var builder = new ODataConventionModelBuilder();
builder.EntitySet<Person>("People");
configuration.Routes.MapODataRoute(routeName:"OData", routePrefix:"odata", model:builder.GetEdmModel());
我正在寻找一种方法,以编程方式为任何OData操作之外的已注册实体集生成绝对URL。例如,我想请求Person
类型的OData端点并返回"http://host/odata/People"
。
标准URL帮助程序似乎不适用,因为OData路由是基于约定的。
答案 0 :(得分:1)
您可能希望利用ODataConventionModelBuilder.GetEdmModel()生成的IEdmModel实例。
IEdmModel model = builder.GetEdmModel(); // the builder is what you defined in the question.
var entitySetName = "";
foreach (var temp in model.FindEntityContainer("Container").EntitySets())
{
if (temp.ElementType.Name == "Person")
{
entitySetName = temp.Name;
break;
}
}
return "http://host/odata/"+entitySetName;
注意:如果为实体类型定义多个实体集,则高位代码仅返回第一个实体类型。