Нужна помощь в вызове методов контроллера Web Api для получения данных
Я новичок в Web Api (я, вероятно, здесь упускаю что-то очень простое) У меня есть проект Web Api с ProductsController.cs
который имеет свойство типа List<Product>
и я просто хочу вызвать API в браузере, например localhost/api/products/1
или же /api/products/getproduct/1
чтобы получить ответ продукта для указанного идентификатора в URL, но я не могу получить его для получения каких-либо данных. Я получаю ошибку "не найден" каждый раз. Чего мне не хватает, чтобы заставить его найти данные и получить ответ?
Я пробовал следующее:
public IHttpActionResult Get(int id)
{
var product = products.FirstOrDefault(p => p.Id == id);
if (product == null)
{
return NotFound();
}
else
{
return Ok(product);
}
}
И даже следующее, которое все еще возвращается, не найдено:
public string Get(int id)
{
return "product test";
}
1 ответ
Убедитесь, что маршрутизация настроена правильно
WebApiConfig.cs
public static class WebApiConfig {
public static void Register(HttpConfiguration config) {
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Оттуда у вас есть два варианта маршрутизации к действию.
Конвенция основе.
public class ProductsController : ApiController {
//...constructor code removed for brevity
[HttpGet] // Matches GET api/products
public IHttpActionResult GetAllProducts() {
return Ok(products);
}
[HttpGet] // Matches GET api/products/1
public IHttpActionResult GetProduct(int id) {
var product = products.FirstOrDefault(p => p.Id == id);
if (product == null) {
return NotFound();
}
return Ok(product);
}
}
или атрибут маршрутизации
[RoutePrefix("api/products")]
public class ProductsController : ApiController {
//...constructor code removed for brevity
[HttpGet]
[Route("")] // Matches GET api/products
public IHttpActionResult GetAllProducts() {
return Ok(products);
}
[HttpGet]
[Route("{id:int}")] // Matches GET api/products/1
public IHttpActionResult GetProduct(int id) {
var product = products.FirstOrDefault(p => p.Id == id);
if (product == null) {
return NotFound();
}
return Ok(product);
}
}