Я пытаюсь добавить управление версиями API, и мой план - создать контроллер для каждой версии в другом пространстве имен. Моя структура проекта выглядит следующим образом (примечание: нет отдельной области для каждой версии)
Controllers
|
|---Version0
| |
| |----- ProjectController.cs
| |----- HomeController.cs
|
|---Version1
|
|----- ProjectController.cs
|----- HomeController.cs
Я использую RoutingAttribute для маршрутов. Таким образом, ProjectController в Version0 имеет функцию с маршрутом как
namespace MyProject.Controllers.Version0
{
class ProjectController : BaseController
{
...
[Route(api/users/project/getProjects/{projectId})]
public async GetProjects(string projectId)
{
...
}
}
}
и ProjectController в Версии 1 имеет функцию с маршрутом как
namespace MyProject.Controllers.Version1
{
class ProjectController : BaseController
{
...
[Route(api/v1/users/project/getProjects/{projectId})]
public async GetProjects(string projectId)
{
...
}
}
}
Но я получаю 404-NotFound, когда пытаюсь попасть в службу.
Если я переименую контроллеры на уникальное имя (Project1Controller и Project2Controller), то маршрутизация будет работать. Но я стараюсь избегать переименования для простоты.
Я воспользовался этой ссылкой, чтобы решить эту проблему, но это не помогло. Я создал области, но до сих пор не добился успеха. Добавление логики маршрутизации в файл global.aspx не помогает. Пространство имен также не работает. http://haacked.com/archive/2010/01/12/ambiguous-controller-names.aspx/
В приведенной выше ссылке предлагается создать области, но маршрутизация атрибутов не поддерживает области по ссылке: http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
Есть ли другое решение? Ошибка с атрибутами RoutingAttributes?
Спасибо!