OData API を組み込んだ ASP.NET MVC 4 アプリがあります。これは、より大きな OData サポートで 2012.2 のものを実行しています。
私はこれに別の領域を使用しませんでした...それは間違いだったかもしれませんが、私のアプリは小さく、領域はやり過ぎのように見えました.
コントローラーを正しくセットアップしました。セグメント コレクション (セグメントはドメイン内のタイプです) へのパスの例は "/odata/Segments" です。これは期待どおりにロードされ、機能しています。
私のホームページで、Razor の Html.ActionLink (または RouteLink) を使用してこのリソースへのリンクを追加しようとしていますが、OData コントローラーのレイアウトはこれらのメソッドではうまく機能しないようです。 WebAPI構成:
config.Routes.MapODataRoute("OData Route", "odata", model );
次のようなものを使用して (私の知る限り) 絶対にないときに、odata コントローラーがあるふりをすることで、メソッドをだまして正しい URL を作成することができます。
@Html.RouteLink("Segments", "Segments", "odata")
しかし、それはハックのようです。
MapODataRoute に渡されたプレフィックスがどのように MVC チェーンに組み込まれているかを理解できるほど、ASP.NET ルーティングの配管をよく理解していないため、「正しい」かみそりメソッドを「正しい」方法で使用できます。
キックのために、これが私の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);
}
}