Nomes ambíguos de controladores com atributos de roteamento: controladores com o mesmo nome e namespace diferente para controle de versão
Estou tentando adicionar o controle de versão da API e meu plano é criar um controlador para cada versão no espaço para nome diferente. A estrutura do meu projeto se parece com isso (nota: nenhuma área separada para cada versão)
Controllers
|
|---Version0
| |
| |----- ProjectController.cs
| |----- HomeController.cs
|
|---Version1
|
|----- ProjectController.cs
|----- HomeController.cs
Estou usando RoutingAttribute para as rotas. Portanto, o ProjectController na Versão0 tem função com route como
namespace MyProject.Controllers.Version0
{
class ProjectController : BaseController
{
...
[Route(api/users/project/getProjects/{projectId})]
public async GetProjects(string projectId)
{
...
}
}
}
e ProjectController na Versão1 tem função com route como
namespace MyProject.Controllers.Version1
{
class ProjectController : BaseController
{
...
[Route(api/v1/users/project/getProjects/{projectId})]
public async GetProjects(string projectId)
{
...
}
}
}
Mas, recebo o 404-NotFound quando estou tentando acessar o serviço.
Se eu renomear os controladores para terem um nome exclusivo (Project1Controller e Project2Controller), o roteamento funcionará. Mas, estou tentando evitar renomear por simplicidade.
Eu segui este link para resolver o problema, mas não ajudou. Criei áreas, mas ainda não obtive sucesso. Adicionar lógica de roteamento no arquivo global.aspx não ajuda. O espaço para nome também não funciona.http://haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx/
O link acima sugere criar áreas, mas o roteamento de atributos não suporta áreas conforme o link:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
Existe outra solução? Um erro com RoutingAttributes?
Obrigado!