【问题标题】:How do I generate an absolute OData URL for a given entity type?如何为给定实体类型生成绝对 OData URL?
【发布时间】:2014-03-07 16:14:19
【问题描述】:

我有一个有效的 OData 实现,并以典型方式设置路由:

var builder = new ODataConventionModelBuilder();
builder.EntitySet<Person>("People");

configuration.Routes.MapODataRoute(routeName:"OData", routePrefix:"odata", model:builder.GetEdmModel());

我正在寻找一种方法以编程方式为已注册的实体集生成绝对 URL,从任何 OData 操作之外。例如,我想请求 Person 类型的 OData 端点并返回 "http://host/odata/People"

标准 URL 助手似乎不适用,因为 OData 路由是基于约定的。

【问题讨论】:

  • “我想请求 Person 类型的 OData 端点并返回 'host/odata/People'”是什么意思?请求是什么?

标签: asp.net-mvc odata


【解决方案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;

注意:如果为一个实体类型定义了多个实体集,上面的代码只返回第一个。

【讨论】:

  • 一般建议使用String.Concat()String.Format()构建字符串,而不是+;一开始的表现要好得多。诚然,在这种情况下,影响将是微乎其微的,但最好坚持这个习惯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-06
  • 1970-01-01
  • 1970-01-01
  • 2014-12-16
  • 1970-01-01
  • 2020-07-22
  • 2011-05-22
相关资源
最近更新 更多