我收到错误 - 找到了与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>(); }
}
}
当您需要支持向后兼容性时,需要API版本控制。尝试使用nuget包进行API版本控制。
Nuget:Microsoft.AspNet.WebApi.Versioning
GitHub:aspnet-api-versioning
[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