如何在 C# ASP.NET WebAPI 中使用 URI 进行 Web API 版本控制?
csharpserver side programmingprogramming更新于 2025/4/17 21:07:17
一旦 Web API 服务公开,不同的客户端应用程序就会开始使用我们的 Web API 服务。随着业务的增长和需求的变化,我们可能也必须更改服务,但对服务的更改应该以不破坏任何现有客户端应用程序的方式进行。
这是 Web API 版本控制有帮助的时候。我们保持现有服务原样,因此我们不会破坏现有的客户端应用程序,并开发新客户端应用程序可以开始使用的服务的新版本。
实现版本控制的选项之一是使用 URI。下面是如何实现相同功能的示例。
示例
让我们考虑具有以下操作方法的 sudent 控制器的版本 1 (V1)。
学生模型 V1 −
namespace DemoWebApplication.Models{
public class StudentV1{
public int Id { get; set; }
public string Name { get; set; }
}
}
Student Controller 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)。
Student Model V2 −
示例
namespace DemoWebApplication.Models{
public class StudentV2{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
}
Student Controller 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;
}
}
}
输出
上面示例的输出如下所示。


相关文章
打印
下一节:如何使用 C# ASP.NET WebAPI 中的 Querystring 参数进行版本控制? ❯❮ 上一节:如何在 C# ASP.NET\WebAPI 中限制对具有特定 HTTP 动词的方法的访问?

