1

主題は不明確かもしれませんが、次のように、ほぼ同一の 2 つの API 呼び出しを公開したいと思います。

Routes
            .Add<GameConsole>("/consoles", "GET")
            .Add<GameConsole>("/consoles/count", "GET");

私が今持っているのは「/consoles」で、リポジトリからのすべての GameConsole オブジェクトのリストを提供します。追加したいのは「/consoles/count」です。これにより、リポジトリのすべての GameConsole オブジェクトのカウントが得られます。

しかし、サービスはルートで 1 つの DTO しかマップできないため、次のものしか持てません。

    public object Get(GameConsole request)
    {
        return mRepository.GetConsoles();
    }

DTO へのルート マップが 1 つしかないことの制限を本当に理解しているかどうかはわかりません。これを回避する方法はありますか?補足として、DTO がまったく使用されていないにもかかわらず、サービス メソッドに DTO を渡さなければならないのは奇妙に思えます (ルートへのマッピングが唯一の目的ですか?)

4

2 に答える 2

2

2 つのルートには変数へのマッピングが含まれておらず、両方とも同じリクエストに登録されているため、リクエスト DTO だけから一致するルートを判断することはできません。たとえば、次のようになります。

public object Get(GameConsole request)
{
    return mRepository.GetConsoles();
}

つまり、base.Requestをイントロスペクトし、. PathInfoRawUrlまたはAbsoluteUri違いを区別する。

変数にマップされている場合、たとえば:

Routes
  .Add<GameConsole>("/consoles", "GET")
  .Add<GameConsole>("/consoles/{Action}", "GET");

次に、入力された を見て、リクエストを区別できますrequest.Action

ただし、動作が異なり、応答が異なる場合は、2 つの別個のサービスにする必要があります。たとえば、次のようになります。

Routes
  .Add<GameConsole>("/consoles", "GET")
  .Add<GameConsoleCount>("/consoles/count", "GET");

もう 1 つのオプションは、同じサービスが両方の要求を満たすことができるように、両方のサービスの結合されたデータセットを返す (つまり、カウントも含む) 単一の粗粒度サービスのみを持つことです。

于 2013-06-28T03:45:35.623 に答える