我有以下代码:
非通用控制器:
<None Update="config.json">
<CopyToPublishDirectory>Always</CopyToPublishDirectory>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
通用控制器:
[Route(Route)]
public class DogsController : EntityControllerBase<Dog,DogDto>
{
public const string Route = "api/dogs";
public DogsController(IDogsRepository repository) : base(repository)
{
}
[ProducesResponseType(200, Type = typeof(DogDto))]
[HttpGet)]
public async Task<ActionResult<IEnumerable<DogDto>>> Get([FromQuery]int kennelId, [FromQuery]DateTimeOffset birthDate)
{
return Ok("Hit non-generic controller");
}
protected override DogDto ToDto(Dog instance) =>
new DogDto(instance.Id,
instance.BirthDate,
instance.KennelId
instance.Name);
}
当用户提供查询参数 public abstract class EntityControllerBase<TEntity, TEntityDto> : ControllerBase where TEntity : IIdentifiable<int>
{
readonly IRepository<TEntity, int> _repository;
protected EntityControllerBase(IRepository<TEntity, int> repository)
{
_repository = repository;
}
protected abstract TEntityDto ToDto(TEntity instance);
[HttpGet]
[ProducesResponseType(200)]
public async Task<ActionResult<IEnumerable<TEntityDto>>> GetAll()
{
var instances = await _repository.GetAll();
return Ok(instances.Select(ToDto));
}
}
和/api/dogs
时,我想在kennelId
上调用非通用控制器,否则调用通用方法。现在,它总是调用通用控制器。我该如何解决?