#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>>
, который должен вызвать ошибку в этой строке.