Несколько действий совпадают. Следующие действия соответствовали данным маршрута и были выполнены все ограничения
Я пытаюсь создать версию API, но получаю следующую ошибку
Несколько действий совпадают. Следующие действия соответствовали данным маршрута и были выполнены все ограничения
Я не хотел дублировать все методы контроллера, а просто переопределил все, что изменилось, но без изменений вызывает ошибку. это плохая практика, что я пытаюсь? Любое решение моей проблемы?
[ApiVersion( "1.0" )]
[AllowAnonymous]
[Route("api/v{api-version:apiVersion}/[controller]")]
public class HeartbeatController : Controller
{
[AllowAnonymous]
[HttpGet, MapToApiVersion("1.0")]
public virtual IActionResult Beat()
{
return Ok(DateTime.Now.ToString("HH:mm:ss"));
}
[AllowAnonymous]
[HttpGet, MapToApiVersion("0.9")]
public virtual IActionResult Get()
{
return Ok(Environment.MachineName);
}
}
[ApiVersion("2.0")]
[AllowAnonymous]
[Route("api/v{api-version:apiVersion}/[controller]")]
public class HeartbeatController : V1.Controllers.HeartbeatController
{
[AllowAnonymous]
[HttpGet]
public override IActionResult Get()
{
return Ok("this is version 2 " + Environment.MachineName);
}
}
1 ответ
Наследование может быть сложным, и не всегда очевидно, какие атрибуты наследуются, а какие нет. В этом случае RouteAttribute и HttpGetAttribute наследуются, а ApiVersionAttribute - нет.
Следующая конфигурация даст вам то, что вы ищете:
using static System.Environment;
[ApiVersion( "1.0" )]
[Route( "api/v{api-version:apiVersion}/[controller]" )]
public class HeartbeatController : Controller
{
[HttpGet]
public virtual IActionResult Get() => Ok( MachineName );
}
[ApiVersion( "2.0" )]
public class HeartbeatController : V1.HeartbeatController
{
public override IActionResult Get() => Ok( "this is version 2 " + MachineName );
}