2

同じコントローラー(AnimalsControllerなど)で異なるエンティティセット(CatsとDogsなど)を処理することは可能ですか?

public class AnimalsController : EntitySetController<Animal, int>
{
}

..。

ODataModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Animal>("Cats");
modelBuilder.EntitySet<Animal>("Dogs");

Microsoft.Data.Edm.IEdmModel model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute("ODataRoute", "odata", model);

基本的に、同じコントローラーに到達する2つの異なるルート(/ odata/catsと/odata/ dogs)を宣言する機能が必要です。

コントローラに入ると、ルートコンテキストを取得して、メソッドが猫または犬を返すかどうかを判断する方法が必要になります。

誰かが私にこの結果を達成するための正しい方向を示すことができますか?

4

1 に答える 1

4

通常、公開するエンティティセットごとに1つのWebAPIコントローラーを用意することをお勧めします。ただし、実際にリクエストを同じコントローラーにマップする必要がある場合は、次のようにします。次のコントローラーセレクターを定義します。

public class AnimalControllerSelector : DefaultHttpControllerSelector
{
    public override string GetControllerName(HttpRequestMessage request)
    {
        string controllerName = base.GetControllerName(request);
        if (controllerName == "Cats" || controllerName == "Dogs")
        {
            controllerName = "Animals";
        }
        return controllerName;
    }
}

登録する:

config.Services.Replace(typeof(IHttpControllerSelector), new AnimalControllerSelector());

次に、次のコードを使用して、コントローラー内のエンティティセット名にアクセスします。

string entitySetName = (ODataPath.Segments.First() as EntitySetPathSegment).EntitySetName;

お役に立てば幸いです。

于 2013-02-19T19:31:29.760 に答える