私の 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 は失敗し、受け入れられません。