首页 > 解决方案 > 在差异控制器 C# 上具有相同路由名称的 API 路由版本控制

问题描述

我收到错误 - 找到与 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>(); }
    }
}

标签: c#restapiroutingversioning

解决方案


当您需要支持向后兼容性时,需要 API 版本控制。尝试使用 nuget 包进行 API 版本控制。

Nuget:Microsoft.AspNet.WebApi.Versioning

GitHub: aspnet-api-versioning


推荐阅读