CreatedAtAction () делает это. Спасибо!

я есть универсальный контроллер, который имеет несколько производных классов контроллеров. но я не могу понять, как справиться с HttpGetназвание маршрута так как это требует постоянного.

[HttpGet("{id}", Name ="should not hard coded here for derived class")]
 public virtual async Task<IActionResult> Get(int id)

Мне нужно имя маршрута, потому что в моей функции HttpPost я хочу вернуть CreatedAtRoute (), который требует HttpGet'sназвание маршрута

Имя маршрута не может быть жестко закодировано, потому что у всех производных классов должно быть другое имя маршрута.

вот базовый контроллер

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);
    }
}

Вот производный контроллер

[Route("api/v1/DerivedControllerA")]
public class DerivedControllerA : BaseController<TimeOff, HRContext>
{
    public DerivedControllerA(IGenericRepository<TimeOff, HRContext> repository, ILogger<DerivedControllerA> logger)
        : base(repository, logger)
    {

    }
}  

Любая помощь будет оценена, спасибо.

Ответы на вопрос(1)

Ваш ответ на вопрос