Версии маршрута API с тем же именем маршрута на контроллерах diff C # - PullRequest
1 голос
/ 10 марта 2019

Я получаю сообщение об ошибке - найдено несколько типов контроллеров, соответствующих URL-адресу.

В моем мобильном API я должен поддерживать несколько версий. Все они объединены в один контроллер с переопределенными атрибутами маршрута.

Мой код такой (работает без проблем)

namespace MyApi 
{
    [RoutePrefix("company")]
    public class UseController
    {
        [Route("users")]
        public List<user> GetUsers() { return new List<User>(); }

        [Route("~/v2/company/users")]
        public List<user> GetUsers_v2() { return new List<User>(); }

        [Route("~/v3/company/users")]
        public List<user> GetUsers_v3() { return new List<User>(); }
    }
}

Поскольку контроллер растет, его становится все труднее обслуживать. Я хочу разделить версии на контроллеры различий, например

namespace MyApi 
{
    [RoutePrefix("company")]
    public class UseController
    {
        [Route("users")]
        public List<user> GetUsers() { return new List<User>(); }
    }
}

namespace MyApi.v2
{
    [RoutePrefix("v2/company")]
    public class UseController
    {
        [Route("users")]
        public List<user> GetUsers() { return new List<User>(); }
    }
}

namespace MyApi.v3
{
    [RoutePrefix("v3/company")]
    public class UseController
    {
        [Route("users")]
        public List<user> GetUsers() { return new List<User>(); }
    }
}

Ответы [ 2 ]

0 голосов
/ 10 марта 2019
[RoutePrefix("api/v2/company")]
public class UseV2Controller : ApiController
{
    [Route("users")]
    public List<user> GetUsers_v2() { return new List<user>(){new user(){ Name ="v2User"} }; }
}

[RoutePrefix("api/v3/company")]
public class UseV3Controller : ApiController
{
    [Route("users")]
    public List<user> GetUsers_v3() { return new List<user>() { new user() { Name = "v3User" } }; }

}

public class user
{
    public string Name { get; set; }
}

Я изменил имя вашего контроллера на UseV2Controller вместо UseControllerV2, то же самое с v3. Затем добавили префикс маршрута api / v2 / company и api / v3 / company

0 голосов
/ 10 марта 2019

Версии API необходимы, когда вам необходимо поддерживать обратную совместимость.Попробуйте использовать пакет nuget для управления версиями вашего API.

Nuget: Microsoft.AspNet.WebApi.Versioning

GitHub: aspnet-api-versioning

...