Global.asaxにデフォルトルートがあります。
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
特定の機能をターゲットにしたいので、別のルートを作成しました。
RouteTable.Routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
だから、私のコントローラーでは、私は:
public string Get(int id)
{
return "object of id id";
}
[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
return new string[] { "byCategory1", "byCategory2" };
}
電話をかける.../api/records/bycategoryid/5
と私が欲しいものをくれます。しかし、呼び出し.../api/records/1
は私にエラーを与えます
リクエストに一致する複数のアクションが見つかりました:...
ルートはちょうどURLが有効であるかを定義しますが、それが機能マッチング、両方に来るとき-私はそれがある理由を理解Get(int id)
し、ByCategoryId(int id)
一致api/{controller}/{id}
するもので、混乱の枠組みを。
デフォルトのAPIルートを再び機能させるために何をする必要があります{action}
か?RecordByCategoryIdController
リクエストするデフォルトのAPIルートに一致する名前の別のコントローラーを作成することを考えました.../api/recordbycategoryid/5
。しかし、私はそれが「汚い」(したがって不十分な)解決策であることがわかりました。私はこれに関する答えを探しましたが、{action}
この問題について言及しているルートの使用に関するチュートリアルはありません。