webapi の多かれ少なかれ標準的なルートがあります ({action} を追加したことを除いて):
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{action}",
defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional }
);
問題は、任意の (0 個以上、ランダムな名前の) クエリ パラメーターを受け入れるコントローラーがあるときに始まります。次のような URL への GET HTTP で動作するとします。
/api/Data/2836581?id=3&name=lol&etc=23&filter=all_but_nice
Get(int id) コントローラー メソッドで、id==3 を受け取りましたが、id==2836581 を期待していました。
次を使用してこれをバイパスできます。
Request.GetRouteData().Values["id"]; // 2836581
Request.GetQueryNameValuePairs(); // All query parameters
しかし、このソリューションは「ハッピーパス」というよりもハックのように感じます。
WebApi に URL クエリ パラメータよりもルート変数を優先させることはできますか?