1

私の Web API シナリオでは、この (既定の) ルートはほとんどすべてのコントローラーでうまく機能します。

config.Routes.MapHttpRoute(
            name: "DefaultRoute",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

いくつかのコントローラーについては、次のようにアクション名でマップしたいと考えています。

config.Routes.MapHttpRoute(
            name: "ActionRoute",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

バックグラウンド:

ほとんどのコントローラーは、デフォルトで GEE、POST、PUT、および DELETE にマップされます。ただし、データの初期化、クリーンアップ、テストなどの操作を実行する「管理」コントローラーをいくつか予約しています。これらのコントローラーには、GET を介して実行される複数のメソッドがある場合があるため、2 番目のルートになります。

これらのルートのいずれかを使用するとうまく機能しますが、両方を設定すると、次の 2 つのいずれかのエラーが発生します。

最初のデフォルト ルート:

api/books/                -> OK
api/books/someGuidId      -> OK
api/admin/someAdminAction -> 500 Internal Server Error (multiple actions found)
api/test/sometestAction   -> 500 Internal Server Error (multiple actions found)

最初のアクション ルート:

api/books/                -> OK
api/books/someGuidId      -> 404 Not Found (no action that matches "someGuidId")
api/admin/someAdminAction -> OK
api/test/sometestAction   -> OK

私の質問は、これらのルートを同時に機能させるにはどうすればよいですか?

[編集]

api/books/someGuidId は重要な呼び出しではありません。(GET を介して) それなしで生活できますが、同じ URL への POST、PUT、および DELETE は失敗し、受け入れられません。

4

1 に答える 1