【问题标题】:How to do API versioning in ASP.NET ZERO Web API?如何在 ASP.NET ZERO Web API 中进行 API 版本控制?
【发布时间】:2020-10-19 19:40:20
【问题描述】:

我正在使用 ASP.NET ZERO(Angular 和 ASP.Net Core 模板)。 如何创建不同的 API 版本,我想支持不同的版本以实现向后兼容。 例如 /api/services/app/Customer/GetAll - 这是当前版本 /api/services/app/v2/Customer/GetAll - 这是我要创建的下一个版本。并且希望同时支持这两个版本。 有人可以指导我完成这个吗?

【问题讨论】:

    标签: asp.net-boilerplate api-versioning


    【解决方案1】:

    ASP.NET API Versioning 旨在使用您选择的任何方法解决这个确切的问题,包括上面列出的所有方法。有各种配置的大量文档和示例。您可以删除 API 版本控制,只需对现有应用程序进行几乎没有更改。如果需要,还支持 OpenAPI/Swagger。

    模板只是脚手架。无论您最初如何启动或创建项目,您都可以使用 API 版本控制。

    尽管它很受欢迎,但我建议不要按 URL 段进行版本控制。如果您关心遵守 REST 约束,那么它是 RESTful 最少的方法(它违反了 URL 作为 Uniform Interface 约束下的标识符)。如果你有选择,我会考虑其他方法。虽然不是 RESTful,但查询字符串方法通常是最实用的,易于使用且不违反任何约束。

    如果您有问题,我很乐意进一步详细说明或回答。

    【讨论】:

      【解决方案2】:

      您可以通过多种方式实现 API 版本控制。

      1. URI 的
      2. 查询字符串
      3. 版本标题
      4. 接受标头
      5. 媒体类型

      为了回答你的问题,下面是示例。

      定义路线

      config.Routes.MapHttpRoute(
          name: "Version1",
          routeTemplate: "api/v1/Students/{id}",
          defaults: new { id = RouteParameter.Optional, controller = "StudentsV1" }
      );
      
      config.Routes.MapHttpRoute(
          name: "Version2",
          routeTemplate: "api/v2/Students/{id}",
          defaults: new { id = RouteParameter.Optional, controller = "StudentsV2" }
      );
      

      使用路由属性

      public class StudentsV1Controller : Controller
      {
          [Route("api/v1/students")]
          public IEnumerable<StudentV1> Get() {...}
      
          [Route("api/v1/students/{id}")]
          public StudentV1 Get(int id) {...}
      }
      
      public class StudentsV2Controller : Controller
      {
          [Route("api/v2/students")]
          public IEnumerable<StudentV2> Get() {...}
      
          [Route("api/v2/students/{id}")]
          public StudentV2 Get(int id) {...}
      }
      

      参考:https://csharp-video-tutorials.blogspot.com/2017/02/web-api-versioning-using-uri.html

      【讨论】:

        猜你喜欢
        • 2016-11-13
        • 2017-03-18
        • 2018-02-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-03
        • 2020-01-08
        相关资源
        最近更新 更多