2017-06-11 9 views
0

私はJobsControllerという名前のODataコントローラを持っています。 このコントローラは、私が私にCONTEXTID(データベース識別子)を送信するためにクライアントが必要クエリを行うために仕事の実体OData Controllerに余分な識別子を渡す方法

public class Job 
{ 
    int Id {get;set;} 
    int Name {get;set;} 
... 
} 

を表します。 contextIdをチェックすることにより、正しいデータベースが初期化されます。

私はこのような何か問い合わせることがしたい
[HttpGet] 
[ODataRoute("Jobs")] 
[EnableQuery] 
public IHttpActionResult Get() 
{ 
    var unitOfWork = UnitOfWorkFactory.Create(contextId); 

    if (unitOfWork == null) 
     return InternalServerError(new Exception("Unit of work not found")); 

    return Ok(unitOfWork.Jobs.GetAll()); 
} 

::http://localhost:38483/odata/Jobs(「localDbを」)が、 もちろん、CONTEXTIDは...私は私のコントローラは、そのようになります。希望

仕事モデルの一部ではありませんそれはあなただけのセットアップ、まず、これは2つの異なるデータベースに接続することができますつのサービスが混乱思える持つ、これを処理するための非常に奇妙な方法のように思える

あるいはhttp://localhost:38483/odata/Jobs/localDb

答えて

0

可能することができません代わりに2つの異なるエンドポイント?

これをすべて1つのエンドポイントに入れる必要がある場合、ODataは設定したモデル/メタデータに基づいてURLの厳密な定義を持っており、フィルタリングできるものはすべてメタデータに含める必要がありますクライアントがメタデータを消費するだけでサービスを使用できることを意味します。これをURLに含める場合は、メタデータにどのように適用されるか考える必要があります。あるいは、これを達成するためにカスタムヘッダーを使用することもできます。カスタムヘッダーを使用して

だけで、ヘッダを送信すると、あなたのモデルでこれを含めるには、Requestオブジェクト

からあなたのコントローラでこれを検索する場合だろう、私は考えることができる最善のことは、セットアップに含まれていますエンティティにはhttp://localhost:38483/odata/localDb/Jobs/が含まれています詳細はこちらからhttps://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/odata-containment-in-web-api-22

+0

答えてくれてありがとうTom。 これはこれを扱う奇妙な方法であり、2つの異なるエンドポイントに分割するようアドバイスしました。 私は(GETリクエストなどのために)ヘッダーを変更し、単純なアクションを追加することでODataを使用する目的を失うと思います – kaycee

関連する問題