Nome da rota para o atributo HttpGet Nome da classe de controlador genérico base no asp.net core 2
Eu tenho um controlador genérico, que tem várias classes de controlador derivadas. mas não consigo descobrir como lidar com os HttpGetnome da rota uma vez que requer constante.
[HttpGet("{id}", Name ="should not hard coded here for derived class")]
public virtual async Task<IActionResult> Get(int id)
Eu preciso do nome da rota porque na minha função HttpPost eu quero retornar CreatedAtRoute () que requer HttpGet'snome da rota
O nome da rota não pode ser codificado porque toda a classe derivada precisa ter um nome de rota diferente.
aqui está o controlador base
public abstract class BaseController<TEntity, TContext> : Controller where TEntity : BaseOptionType, new() where TContext : DbContext
{
private readonly IGenericRepository<TEntity, TContext> _repository;
private readonly ILogger<BaseGenericOptionTypesController<TEntity, TContext>> _logger;
public BaseController(IGenericRepository<TEntity, TContext> repository, ILogger<BaseController<TEntity, TContext>> logger)
{
_repository = repository;
_logger = logger;
}
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[HttpGet("{id}", Name = "should not hard code here for derived class")]
public virtual async Task<IActionResult> Get(int id)
{
var optionType = await _repository.FindByIdAsync(id);
if (optionType == null)
{
_logger.LogInformation($"[ID not found]");
return NotFound();
}
return Ok(optionType);
}
}
Aqui está o Controlador Derivado
[Route("api/v1/DerivedControllerA")]
public class DerivedControllerA : BaseController<TimeOff, HRContext>
{
public DerivedControllerA(IGenericRepository<TimeOff, HRContext> repository, ILogger<DerivedControllerA> logger)
: base(repository, logger)
{
}
}
Qualquer ajuda seria apreciada, obrigado.