0

您好,我有一个控制器,我想对其路由进行版本控制。但是我不希望将 api-version 添加到查询字符串中,而是添加到 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"

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

4

1 回答 1

5

安装包 Microsoft.AspnetCore.Mvc.ApiVersioning(如果您还没有这样做的话)。

通过添加以下内容在 Startup -> ConfigureServices(...) 中配置版本控制服务:

services.AddApiVersioning();

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

[Route("api/v{version:apiVersion}/admin")] 这使您的控制器可以使用诸如“api/v1.0/admin”之类的 URL。如果您不想要,可以删除 {version} 参数之前的 'v'。

有关更多详细信息,请让我参考有关 url 版本控制的文档

于 2019-09-05T08:54:04.463 回答