Универсальный контроллер без необходимости его реализацииC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Универсальный контроллер без необходимости его реализации

Сообщение Anonymous »

У меня есть приложение Blazor с сервером и клиентом, где у клиента есть общий сервис, который используется для операций CRUD для всех различных типов в моем проекте. Затем эта универсальная служба вызывает определенный контроллер на сервере, который выполняет логику.
У клиента есть универсальная служба, которая используется для всех различных классов для всех операций CRUD, которая вызывает разные контроллеры на сервер:

Код: Выделить всё

public async Task GetListAsync()
{
string url = apiUrl + $"/api/{typeof(Type).Name}";
string authToken = await GetAccessTokenAsync();

logger.LogInformation("Retrieving list...");
using HttpClient httpClient = GetHttpClient();
return await HttpClientHelper.GetAsync(httpClient, url, authToken);
}

...
Тогда на сервере есть общий контроллер со всеми методами, общими для всех различных сервисов:

Код: Выделить всё

public class GenericController : ControllerBase where Identity : IIdentity
{
private readonly IGenericService _service;

public GenericController(IGenericService service, ILogger logger)
{
_service = service;
this.logger = logger;
}

[AllowAnonymous]
[HttpGet]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
public virtual async Task GetList()
{
try
{
result = await _service.GetListAsync();
return Ok(result);
}
catch (Exception ex)
{
return BadRequest(ex.Message);
}

}
}
Тогда, чтобы MVC мог обнаружить маршруты, мне нужно реализовать контроллеры для каждого из типов следующим образом:

Код: Выделить всё

[Authorize]
[Route("api/[controller]")]
[ApiController]
public class ErrorCodeController : GenericController
{
#region Construction/destruction ...
/// 
/// Constructor.
/// 
public ErrorCodeController(IErrorCodeService service, ILogger logger)
: base(service, logger)
{
}
#endregion
}
Теперь мне интересно, есть ли какой-нибудь способ избежать необходимости реализовывать каждый из контроллеров таким образом, поскольку они в основном пусты, за исключением некоторых конкретных контроллеров, реализующих специальные функции.
Я гуглил о динамических контроллерах, но не нашел много информации о том, как это сделать.
Мне было бы очень полезно не создавать почти пустой класс для каждого контроллера, так как у меня много сущностей/классов, и мне нужен один контроллер для каждого из них.

Подробнее здесь: https://stackoverflow.com/questions/793 ... plement-it
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»