次のアクションを持つWebAPIコントローラーがあります。
[HttpPut]
public string Put(int id, JObject data)
[HttpPut, ActionName("Lock")]
public bool Lock(int id)
[HttpPut, ActionName("Unlock")]
public bool Unlock(int id)
そして、次のルートがマッピングされました。
routes.MapHttpRoute(
name: "Api",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "ApiAction",
routeTemplate: "api/{controller}/{action}/{id}"
);
次のリクエストを行うと、すべてが期待どおりに機能します。
PUT /api/items/Lock/5
PUT /api/items/Unlock/5
しかし、私が次のことを要求しようとすると、
PUT /api/items/5
次の例外が発生します。
Multiple actions were found that match the request:
Put(int id, JObject data)
Lock(int id)
Unlock(int id)
デフォルトルートに空のアクション名を追加しようとしましたが、それは役に立ちませんでした:
[HttpPut, ActionName("")]
public string Put(int id, JObject data)
デフォルトのRESTfulルーティングをカスタムアクション名と組み合わせる方法はありますか?
編集:ルーティングメカニズムは、コントローラーの選択によって混乱することはありません。単一のコントローラーでのアクションの選択によって混乱します。私が必要としているのは、アクションが指定されていないときにデフォルトのアクションと一致させることです。それが物事を明確にすることを願っています。