Получение ошибки при вызове WebApi - PullRequest
0 голосов
/ 26 июня 2018

Я пытаюсь создать API и пытаюсь получить к нему доступ через chrome, ожидая, что он вернет список элементов

public class ProductController : ApiController
{
    Product product = new Product();
    List<Product> productList = new List<Product>();

    [HttpGet]
    public HttpResponseMessage GetTheProduct(int id)
    {
        this.productList.Add(new Product {Id = 111,Name= "sandeep" });
        return Request.CreateResponse(HttpStatusCode.OK, this.productList.FirstOrDefault(p => p.Id == 111));
    }
}

Я не добавил маршрут, поэтому хочу запустить его, используя маршрут по умолчанию, но когда я его выполняю, я получаю

Не найден ресурс HTTP, соответствующий запросу URI 'http://localhost:65098/api/GetTheProduct()'. Не найден тип, соответствующий контроллеру с именем 'GetTheProduct ()'.

Подскажите, что нужно сделать, чтобы все заработало.

1 Ответ

0 голосов
/ 26 июня 2018

Если используются маршруты по умолчанию, конфигурация может выглядеть следующим образом

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

...