C# Реализация интерфейса на веб-API - PullRequest
0 голосов
/ 30 марта 2020

Я работаю над новым микросервисом и хотел бы добавить интерфейс API для моих клиентов.

Например.
У меня есть служба поддержки клиентов с ApiController и метод:

[HttpGet("api/v1/[action]")]
[ProducesResponseType((int)HttpStatusCode.BadRequest)]
[ProducesResponseType((int)HttpStatusCode.NotFound)]
[ProducesResponseType(typeof(List<CustomerDto>), (int)HttpStatusCode.OK)]
public async Task<IActionResult> GetCustomers()
{
    Log.Logger.Information($"Calling GetCustomers()");
    var ret = await _db.Customer.GetListAsync<CustomerDto>();
    Log.Logger.Information($"GetCustomers()=>{ret?.Count}");
    if (ret == null)
    {
        return NotFound();
    }
        return Ok(ret);
    }

В моем клиентском коде у меня есть сервисный интерфейс, который абстрагирует HTTP-вызовы к вышеуказанному сервису. Таким образом, мой клиент, использующий этот сервис, может просто ввести ICustomerService и позвонить GetCustomers().

Все это прекрасно работает, однако я бы очень хотел, чтобы на контроллере API был установлен такой же интерфейс ICustomerService так что я могу поймать любые проблемы во время компиляции. Проблема в том, что ICustomerService.GetCustomer возвращает List<CustomerDto>, а контроллер возвращает IActionResult.

Task<List<CustomerDto>> GetCustomers();

VS

public async Task<IActionResult> GetCustomers(){}

Есть ли способ принудительного включения интерфейса ICustomerService на контроллер API во время сборки?

...