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

на главную - закладки

Жанры

Язык программирования C#9 и платформа .NET5
Шрифт:

Task<Car> UpdateCarAsync(int id, Car entity);

Task DeleteCarAsync(int id, Car entity);

Task<IList<Make>> GetMakesAsync;

}

}

Класс ApiServiceWrapper

Создайте в каталоге

ApiWrapper
проекта
AutoLot.Services
новый файл класса по имени
ApiServiceWrapper.cs
и модифицируйте его операторы
using
следующим образом:

using System;

using System.Collections.Generic;

using System.Net.Http;

using System.Net.Http.Json;

using System.Text;

using System.Text.Json;

using System.Threading.Tasks;

using AutoLot.Models.Entities;

using Microsoft.Extensions.Options;

Сделайте

класс открытым и добавьте конструктор, который принимает экземпляр
HttpClient
и экземпляр реализации
IOptionsMonitor<ApiServiceSettings>
. Создайте закрытую переменную типа
ServiceSettings
и присвойте ей значение с использованием свойства
CurrentValue
параметра
IOptionsMonitor<Service Settings>
. Код показан ниже:

public class ApiServiceWrapper : IApiServiceWrapper

{

private readonly HttpClient _client;

private readonly ApiServiceSettings _settings;

public ApiServiceWrapper(HttpClient client,

IOptionsMonitor<ApiServiceSettings> settings)

{

_settings = settings.CurrentValue;

_client = client;

_client/BaseAddress = new Uri(_settins.Uri);

}

}

На заметку! В последующих разделах содержится много кода без какой-либо обработки ошибок. Поступать так настоятельно не рекомендуется! Обработка ошибок здесь опущена из-за экономии пространства.

Внутренние поддерживающие методы

Класс содержит четыре поддерживающих метода, которые применяются открытыми методами.

Вспомогательные методы для 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)

{

Поделиться:
Популярные книги

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Жених из гроба

Сотис Майя
1. Гробокопательница
Фантастика:
юмористическое фэнтези
сказочная фантастика
фэнтези
5.00
рейтинг книги
Жених из гроба

Ищу жену с прицепом

Рам Янка
2. Спасатели
Любовные романы:
современные любовные романы
6.25
рейтинг книги
Ищу жену с прицепом

Гримуар тёмного лорда I

Грехов Тимофей
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар тёмного лорда I

Заклятие предков

Прозоров Александр Дмитриевич
3. Ведун
Фантастика:
фэнтези
альтернативная история
8.49
рейтинг книги
Заклятие предков

Крепость над бездной

Лисина Александра
4. Гибрид
Фантастика:
боевая фантастика
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Крепость над бездной

Рота Его Величества

Дроздов Анатолий Федорович
Новые герои
Фантастика:
боевая фантастика
8.55
рейтинг книги
Рота Его Величества

Экспансия: Сотрудничество. Том 5

Белов Артем
5. Планетарный десант
Фантастика:
боевая фантастика
аниме
5.00
рейтинг книги
Экспансия: Сотрудничество. Том 5

Отверженный III: Вызов

Опсокополос Алексис
3. Отверженный
Фантастика:
фэнтези
альтернативная история
7.73
рейтинг книги
Отверженный III: Вызов

Князь Серединного мира

Земляной Андрей Борисович
4. Страж
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Князь Серединного мира

Возвышение Меркурия. Книга 8

Кронос Александр
8. Меркурий
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Возвышение Меркурия. Книга 8

Эволюционер из трущоб. Том 5

Панарин Антон
5. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Эволюционер из трущоб. Том 5

Локки 7. Потомок бога

Решетов Евгений Валерьевич
7. Локки
Фантастика:
аниме
эпическая фантастика
фэнтези
5.00
рейтинг книги
Локки 7. Потомок бога

Черный Маг Императора 4

Герда Александр
4. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Черный Маг Императора 4