public async Task<IList<Car>> GetCarsAsync()
{
var response = await _client.GetAsync($"{_settings.Uri}{_settings.CarBaseUri}");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<IList<Car>>();
return result;
}
public async Task<IList<Car>> GetCarsByMakeAsync(int id)
{
var response = await
_client.GetAsync($"{_settings.Uri}{_settings.CarBaseUri}/bymake/
{id}");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<IList<Car>>();
return result;
}
public async Task<Car> GetCarAsync(int id)
{
var response = await
_client.GetAsync($"{_settings.Uri}{_settings.CarBaseUri}/{id}");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<Car>();
return result;
}
public async Task<IList<Make>> GetMakesAsync()
{
var response = await
_client.GetAsync($"{_settings.Uri}{_settings.MakeBaseUri}");
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<IList<Make>>();
return result;
}
Вызов HTTP-метода POST
Метод для добавления записи
Car
использует HTTP-метод
POST
. Он применяет вспомогательный метод для отправки сущности в формате JSON и возвращает запись
Car
из тела ответа. Вот его код:
public async Task<Car> AddCarAsync(Car entity)
{
var response = await PostAsJson($"{_settings.Uri}{_settings.CarBaseUri}",
JsonSerializer.Serialize(entity));
if (response == null)
{
throw new Exception("Unable to communicate with the service");
}
return await response.Content.ReadFromJsonAsync<Car>();
}
Вызов HTTP-метода PUT
Метод для обновления записи
Car
использует HTTP-метод
PUT
. Он применяет вспомогательный метод для отправки записи
Car
в формате JSON и возвращает обновленную запись
Car
из тела ответа:
public async Task<Car> UpdateCarAsync(int id, Car entity)
{
var response = await PutAsJson($"{_settings.Uri}{_settings.CarBaseUri}/{id}",
JsonSerializer.Serialize(entity));
response.EnsureSuccessStatusCode();
return await response.Content.ReadFromJsonAsync<Car>();
}
Вызов HTTP-метода DELETE
Последний добавляемый метод предназначен для выполнения НТТР-метода
DELETE
. Шаблон соответствует остальным методам: использование вспомогательного метода и проверка ответа на предмет успешности. Он ничего не возвращает вызывающему коду, поскольку сущность была удалена. Ниже показан код метода:
public async Task DeleteCarAsync(int id, Car entity)
{
var response = await DeleteAsJson($"{_settings.Uri}{_settings.CarBaseUri}/{id}",
JsonSerializer.Serialize(entity));
response.EnsureSuccessStatusCode();
}
Конфигурирование служб
Создайте в каталоге
ApiWrapper
проекта
AutoLot.Service
новый файл класса по имени
ServiceConfiguration.cs
. Приведите операторы
using
к следующему виду:
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
Сделайте класс открытым и статическим, после чего добавьте открытый статический расширяющий метод для
IServiceCollection
:
namespace AutoLot.Services.ApiWrapper
{
public static class ServiceConfiguration
{
public static IServiceCollection ConfigureApiServiceWrapper(
this IServiceCollection
services, IConfiguration config)
{
return services;
}
}
}