MVC5: Precedência de roteamento de atributo entre controladores
Estou usando o roteamento de atributo do MVC5 em meus controladores.
Pergunta, questão:Existe uma maneira de controlar a precedência de roteamento de atributo entre os controladores?
Considere o seguinte
[Route("home/{action=index}/{username?}")]
public class HomeController : Controller
{
[Route("home/index/{username?}", Order = 1)]
[Route("home/{username?}", Order = 2)]
[Route("{username?}", Order = 3)]
public ActionResult Index()
{
// ... bunch of stuff
}
}
Com base no código acima,HomeController.Index()
O método de ação deve ser chamado usando as seguintes solicitações:
Segundo controlador:
[Authorize(Roles = "Member")]
[Route("profile/{action=index}")]
public class ProfileController : Controller
{
[Route("profile")]
public ActionResult Index()
{
}
}
oProfileController.Index()
deve ser chamado usando a seguinte solicitação.
Dos exemplos, se eu enviardomain/profile
no URL, uma exceção de ambiguidade é lançada. Parece que existe uma ambiguidade entredomain/{username}
edomain/profile
.
Agora, se eu usasse o roteamento baseado em convenção, isso teria funcionado (vitórias na primeira partida). Mas isso pode ser feito no MVC5 Attribute Routing? porque descobri que uma biblioteca de terceiros suporta precedência entre controladores
https://github.com/mccalltd/AttributeRouting/wiki/Controlling-Route-Precedence
routes.MapAttributeRoutes(config =>
{
config.AddRoutesFromController<ProfileController>();
config.AddRoutesFromController<HomeController>();
});