Если используются маршруты по умолчанию, конфигурация может выглядеть следующим образом
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Это будет означать, что при маршрутизации используется условная маршрутизация со следующим шаблоном маршрута "api/{controller}/{id}"
Ваш контроллер в своем текущем состоянии не следует соглашению. Это приводит к тому, что запросы не сопоставляются в таблицах маршрутизации, что приводит к возникновению проблем с несоблюдением.
Рефакторинг контроллера в соответствии с соглашением
public class ProductsController : ApiController {
List<Product> productList = new List<Product>();
public ProductsController() {
this.productList.Add(new Product { Id = 111, Name = "sandeep 1" });
this.productList.Add(new Product { Id = 112, Name = "sandeep 2" });
this.productList.Add(new Product { Id = 113, Name = "sandeep 3" });
}
//Matched GET api/products
[HttpGet]
public IHttpActionResult Get() {
return Ok(productList);
}
//Matched GET api/products/111
[HttpGet]
public IHttpActionResult Get(int id) {
var product = productList.FirstOrDefault(p => p.Id == id));
if(product == null)
return NotFound();
return Ok(product);
}
}
Наконец, на основе настроенного шаблона маршрута, контроллер ожидает запрос, который выглядит как
http://localhost:65098/api/products/111.
Чтобы получить один продукт, который соответствует указанному id
, если он существует.
Ссылка Маршрутизация в ASP.NET Web API