Чтение онлайн

ЖАНРЫ

Язык программирования 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
. Шаблон соответствует остальным методам: использование вспомогательного метода и проверка ответа на предмет успешности. Он ничего не возвращает вызывающему коду, поскольку сущность была удалена. Ниже показан код метода:

Поделиться с друзьями: