CONTROLLER COM ROTA DINAMICA E ESTATICA

VERA.PALI 04/12/2022 13:27:56
#500845
Estou tentando colocar uma rota dinamica e estatica no mesmo controller, a dinamica funciona certinho, mas se coloco uma estatica sempre da 404.

public class ContratoController : BaseController
{
[HttpGet]
public IActionResult Novo()
{
// code here
}

[HttpGet("{controller}/{*action}")]
public IActionResult Abrir(int? page)
{
// code here
}

Se eu executo da certo
localhost/contrato/abrir/xyz-123

Se eu executo da errado
localhost/contrato/novo

Alguma sugestao do que pode estar dando errado ?
DS2T 05/12/2022 16:40:39
#500851
Resposta escolhida
Para acessar o método Novo, voce precisaria chamar:

localhost/contrato


Não importa muito o nome do método para a rota. Se voce quiser que a rota seja contrato/novo, voce precisará fazer:

[HttpGet("novo")]
public IActionResult Novo()
{
return Ok("123");
}

VERA.PALI 05/12/2022 19:32:14
#500854
Na verdade o meu erro foi outro...
Eu estava (sem perceber) rotulando todas as actions para cair em uma rota, mas na verdade eu tinha que esperar o id ser "any" para então fazer o roteamento correto
Como resolvi ?


  [HttpGet("{controller}/abrir/{*id}")] 


Ou seja, mantenho a rota action abrir somente com o coringa/wildcard e o resto segue a vida...

  
[HttpGet]
public IActionResult Bloquear()
{
return View();
}

[HttpGet]
public IActionResult Desbloquear()
{
return View();
}

[HttpGet("{controller}/abrir/{*id}")]
public IActionResult Abrir(int? page)
{
//codigo aqui
}

Tópico encerrado , respostas não são mais permitidas