次のように、主にデフォルトの WebApi ルート マッピングを使用しています。
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
それは正常に機能しており、私の URL は次のようになります。
[GET] /api/customers Get all customers
[GET] /api/customers/1 Get a specific customer
[POST] /api/customers Create a customer
ここまでは順調ですが、「検索」機能を追加したいと思います。このために、検索条件を表すオブジェクトを POST します。これは、URL で GET として実行するにはオプションが多すぎるためです。私の計画では、URL は次のようになります。
[POST] /api/customers/search
ただし、上記のデフォルトのルーティングでは、サーバーは「リクエストに一致する複数のアクションが見つかりました」と不平を言います。これは、POST データを受け入れる 2 つのコントローラー メソッド (「作成」用と「検索」用) があるためだと思います。 )、ルーティングではそれらを区別する方法がありません。
{action} コンポーネントを含む新しいルート マップを追加しようとしましたが、問題は解決しませんでした。おそらく、URL が両方のルート マップで有効であるためです。(どうにかして、"/search" バリアントがデフォルトのルート マップと一致しないようにする必要があります。
提案してください?