Global.asax'ta varsayılan Rotam var:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Belirli bir işlevi hedefleyebilmek istedim, bu yüzden başka bir rota oluşturdum:
RouteTable.Routes.MapHttpRoute(
name: "WithActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = System.Web.Http.RouteParameter.Optional }
);
Yani, denetleyicimde:
public string Get(int id)
{
return "object of id id";
}
[HttpGet]
public IEnumerable<string> ByCategoryId(int id)
{
return new string[] { "byCategory1", "byCategory2" };
}
Aramak .../api/records/bycategoryid/5
bana istediğimi verecektir. Ancak, aramak .../api/records/1
bana hatayı verecek
İstekle eşleşen birden çok işlem bulundu: ...
Bunun nedenini anlıyorum - rotalar sadece hangi URL'lerin geçerli olduğunu tanımlar, ancak iş eşleştirme Get(int id)
ve ByCategoryId(int id)
eşleştirme api/{controller}/{id}
söz konusu olduğunda çerçeveyi karıştıran şey budur .
Varsayılan API yolunun tekrar çalışması için ne yapmalıyım ve birini devam ettirmeliyim {action}
? İstediğim RecordByCategoryIdController
varsayılan API yoluyla eşleşecek şekilde adlandırılmış farklı bir denetleyici oluşturmayı düşündüm .../api/recordbycategoryid/5
. Bununla birlikte, bunu "kirli" (dolayısıyla yetersiz) bir çözüm olarak görüyorum. Bununla ilgili cevapları aradım ve {action}
bu sorundan bahseden bir rota kullanma konusunda hiçbir öğretici yok .