如何为给定的实体类型生成绝对OData URL?

时间:2014-03-07 16:14:19

标签: asp.net-mvc odata

我有一个有效的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路由是基于约定的。

1 个答案:

答案 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;

注意:如果为实体类型定义多个实体集,则高位代码仅返回第一个实体类型。