【发布时间】:2013-03-07 11:35:35
【问题描述】:
我有一个 ASP.NET MVC 4 应用程序,我正在将 OData API 整合到其中。这是运行具有更大 OData 支持的 2012.2 版本。
我没有为此使用单独的区域...这可能是一个错误,但我的应用程序很小,而且区域似乎过大了。
我的控制器设置正确,我的 Segments 集合的示例路径(segments 是我域中的一种类型)是“/odata/Segments”。这会按预期加载并正常工作。
在我的主页上,我正在尝试使用 Razor 的 Html.ActionLink(或 RouteLink)添加指向此资源的链接,但似乎 OData 控制器布局不适用于这些方法,因为控制器以“odata”为前缀在 WebAPIConfig 中注册时:
config.Routes.MapODataRoute("OData Route", "odata", model );
当肯定没有(据我所知)这样的东西时,我可以通过假装有一个 odata 控制器来欺骗该方法来构造正确的 url:
@Html.RouteLink("Segments", "Segments", "odata")
但这似乎是一种黑客行为。
我不太了解 ASP.NET 路由管道,无法理解传递给 MapODataRoute 的前缀如何被合并到 MVC 链中,以便我可以以“正确”方式使用“正确”剃须刀方法。
只是为了好玩,这是我的 SegmentsController:
public class SegmentsController : EntitySetController<Segment, long>
{
private MarketerDB db = new MarketerDB();
// GET api/segments
override public IQueryable<Segment> Get()
{
return db.Segments.AsQueryable();
}
protected override Segment GetEntityByKey(long key)
{
return db.Segments.Find(key);
}
public IQueryable<Affiliate> GetAffiliates([FromODataUri] long key)
{
return this.GetEntityByKey(key).Affiliates.AsQueryable();
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
【问题讨论】:
标签: asp.net razor asp.net-web-api odata