如何在 C# ASP.NET WebAPI 中使用 URI 进行 Web API 版本控制?
一旦 Web API 服务公开,不同的客户端应用程序就开始使用我们的 Web API 服务。随着业务的增长和需求的变化,我们可能也需要更改服务,但服务的更改应以不破坏任何现有客户端应用程序的方式进行。
这时 Web API 版本控制就派上用场了。我们将现有服务保持原样,这样就不会破坏现有的客户端应用程序,并开发新客户端应用程序可以使用的新版本服务。
实现版本控制的选项之一是使用 URI。下面是一个如何实现相同功能的示例。
示例
让我们考虑一个学生控制器的版本 1 (V1),它具有以下操作方法。
学生模型 V1 −
namespace DemoWebApplication.Models{
public class StudentV1{
public int Id { get; set; }
public string Name { get; set; }
}
}学生控制器 V1 −
using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
public class StudentV1Controller : ApiController{
List<StudentV1> students = new List<StudentV1>{
new StudentV1{
Id = 1,
Name = "Mark"
},
new StudentV1{
Id = 2,
Name = "John"
}
};
[Route("api/v1/students")]
public IEnumerable<StudentV1> Get(){
return students;
}
[Route("api/v1/students/{id}")]
public StudentV1 Get(int id){
var studentForId = students.FirstOrDefault(x => x.Id == id);
return studentForId;
}
}
}在上面的示例中,我们使用了属性路由来实现版本控制。上面示例的输出如下所示:


现在假设在学生控制器中,业务仅为新用户提出了新的更改,而现有用户仍应使用版本 1。在这种情况下,我们必须引入版本 2 (V2)。
学生模型 V2 −
示例
namespace DemoWebApplication.Models{
public class StudentV2{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
}学生控制器 V2 −
using DemoWebApplication.Models;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
namespace DemoWebApplication.Controllers{
public class StudentV2Controller : ApiController{
List<StudentV2> students = new List<StudentV2>{
new StudentV2{
Id = 1,
FirstName = "Roger",
LastName = "Federer"
},
new StudentV2{
Id = 2,
FirstName = "Tom",
LastName = "Bruce"
}
};
[Route("api/v2/students")]
public IEnumerable<StudentV2> Get(){
return students;
}
[Route("api/v2/students/{id}")]
public StudentV2 Get(int id){
var studentForId = students.FirstOrDefault(x => x.Id == id);
return studentForId;
}
}
}输出
上面示例的输出如下所示。


广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP