代码之家  ›  专栏  ›  技术社区  ›  Bercovici Adrian

如何设置web api版本控制?

  •  0
  • Bercovici Adrian  · 技术社区  · 6 年前

    您好,我有一个控制器,我想对其路由进行版本设置。但是,我不想将api版本添加到querystring中,而是添加到url的开头,在控制器名称之后:

    典型路径 /api/admin/get-computer/1
    版本化路径 : /api/admin/V[version]/get-computer/1

    我不知道如何配置控制器和 UseMvc 从扩展 Startup

    [ApiVersion("1.0")]
    [ApiVersion("2.0")]
    [Route("/api/admin")]
    public class AdminController : Controller {
    
        [HttpGet]
        [MapToApiVersion("1.0")]
        [Route("/get-computer")]
        public async Task<ActionResult<Catalog>> GetComputerAsync1(int id) {
            return null;
        }
        [HttpGet]
        [MapToApiVersion("2.0")]
        [Route("/get-computer")]
        public async Task<ActionResult<Catalog>> GetCatalogAsync2(int id) {
           return null;
        }
    }
    

    启动

    public void Configure(IApplicationBuilder app) {
    
                app.UseCors(x => x.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin());
    
                app.UseMvc(routes => {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Admin}/V[???]/{action=Index}/{id?}");
                });
            }
    

    首选用法

    "/api/admin/V1/get-computer/3"
     "/api/admin/V2/get-computer/4"
    

    我怎样才能做到这一点?中的路由模板的假定形式是什么 使用MVC

    0 回复  |  直到 6 年前
        1
  •  2
  •   Gerald Chifanzwa    6 年前

    安装软件包Microsoft.AspnetCore.Mvc.apiversoning(如果尚未安装)。

    通过添加以下内容来配置启动中的版本控制服务->配置服务(…):

    services.AddApiVersioning();

    然后在你的 [Route()] 属性插入api版本参数,如下所示:

    [Route("api/v{version:apiVersion}/admin")]

    关于更多的细节,让我介绍给你 documentation on url versioning

    推荐文章