Язык программирования C#9 и платформа .NET5
Шрифт:
Вспомогательные методы для POST и PUT
Следующие методы являются оболочками для связанных методов
HttpClient
:
internal async Task<HttpResponseMessage> PostAsJson(string uri, string json)
{
return await _client.PostAsync(uri, new StringContent(json, Encoding.UTF8,
"application/json"));
}
internal async Task<HttpResponseMessage> PutAsJson(string uri, string json)
{
return await _client.PutAsync(uri, new StringContent(json, Encoding.UTF8,
"application/json"));
}
Вспомогательный
метод для DELETE
Последний вспомогательный метод используется для выполнения НТТР-метода
DELETE
. Спецификация HTTP 1.1 (и более поздние версии) позволяет передавать тело в HTTP-методе DELETE
, но для этого пока еще не предусмотрено расширяющего метода HttpClient
. Экземпляр HttpRequestMessage
потребуется создавать с нуля. Первым делом необходимо создать сообщение запроса с применением инициализации объектов для установки
Content
, Method
и RequestUri
. Затем сообщение отправляется, после чего ответ возвращается вызывающему коду. Вот код метода:
internal async Task<HttpResponseMessage> DeleteAsJson(string uri, string json)
{
HttpRequestMessage request = new HttpRequestMessage
{
Content = new StringContent(json, Encoding.UTF8, "application/json"),
Method = HttpMethod.Delete,
RequestUri = new Uri(uri)
};
return await _client.SendAsync(request);
}
Вызовы HTTP-метода GET
Есть четыре вызова НТТР-метода
GET
: один для получения всех записей Car
, один для получения записей Car
по производителю Make
, один для получения одиночной записи Car
и один для получения всех записей Make
. Все они следуют тому же самому шаблону. Метод GetAsync
вызывается для возвращения экземпляра HttpResponseMessage
. Успешность или неудача вызова проверяется с помощью метода EnsureSuccessStatusCode
, который генерирует исключение, если вызов не возвратил код состояния успеха. Затем тело ответа сериализируется в тип свойства (сущность или список сущностей) и возвращается вызывающему коду. Ниже приведен код всех методов:
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
. Шаблон соответствует остальным методам: использование вспомогательного метода и проверка ответа на предмет успешности. Он ничего не возвращает вызывающему коду, поскольку сущность была удалена. Ниже показан код метода:
Поделиться с друзьями: