Вызов метода GetAll из веб-Api с вашего клиента C #

#c# #asp.net-web-api2

#c# #asp.net-web-api2

Вопрос:

Я просматривал примеры в Интернете и нашел учебное пособие по извлечению продуктов, в котором в качестве клиента используется служба веб-API C # и консольное приложение C #. однако в учебном пособии определена функция в службе для получения всех продуктов, однако в нем не указано, как ее вызвать из клиента:

 public IEnumerable<Product> GetAllProducts()
{
    ...
}
 

Другие методы CRUD объявляются с использованием IHttpActionResult, поэтому я не знал, как его вызвать.

Итак, в моем клиенте я слепо попытался вызвать выполнение следующего, что, очевидно, неверно:

 using (var client = new HttpClient())
{
    client.BaseAddress = new Uri("http://localhost:59888/");
    client.DefaultRequestHeaders.Accept.Clear();
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

    // HTTP GET ALL
    HttpResponseMessage response = await client.GetAsync("api/products");
    if (response.IsSuccessStatusCode)
    {
        List<Model.Product> products = await.response.Content.ReadAsAsync<IEnumerable<Model.Product>();
    }
}
 

Это выдает синтаксическую ошибку. Итак, как мне их закодировать? Нужно ли мне менять сервер или клиентский код или оба?

Для одного продукта код есть, и это работает:

 // HTTP GET Specific Product
response = await client.GetAsync("api/products/1");
if (response.IsSuccessStatusCode)
{
    Model.Product product = await response.Content.ReadAsAsync<Model.Product>();        
}
 

и сервер:

 public IHttpActionResult GetProduct(int id)
{
    var product = repository.GetByID(id);
    if (product != null)
        return Ok(product);
    else
        return NotFound();     
}
 

Ответ №1:

 List<Model.Product> products = await.response.Content.ReadAsAsync<IEnumerable<Model.Product>(); 
 

Вы пропустили закрытие > в конце. Правильно:

 var products = await.response.Content.ReadAsAsync<IEnumerable<Model.Product>>(); 
 

Комментарии:

1. Ну и дела, спасибо, я такой тупой, могу ли я удалить этот пост сейчас, очевидно, не может быть приведено к общему списку из списка IEnumerable, однако я разберусь с этим

2. Но вы можете добавить .ToList() в конце IEnumerable , чтобы получить его в виде списка. Я даже изменил его на var , поэтому слева должен быть тип IEnumerable<Model.Product>> , который должен вызвать ошибку в этой строке.