更改 api 特定端点的路由

change api routing of an specific endpoint

我有一个目前有效的 api 路由:

    config.Routes.MapHttpRoute(
        name: "MyApi",
        routeTemplate: "api/v1/{param}/string1/string2",
        defaults: new { controller = "MyApi", ... })

在控制器中,我有一个 post 方法可以正常工作,但我需要修改它,这很好并且确实有效。问题如下:

出于兼容性目的,我需要保留旧版本的端点,使用以下路由创建新端点:"api/v2/{param}/string1/string2"。实际上,我希望将它们放在同一个控制器(文件)上,所以我想使用 [Route("...")] 但不幸的是,这只会向路由添加字符串,而我需要的是用 v1 替换 v2路线,有什么办法吗?

我想到了一种解决方法,即使用新路由创建一个新控制器,参数相同,但它必须在另一个文件中,而不是将它们放在一起。 有什么建议或者这是唯一的方法吗?提前致谢。不幸的是,目标网络是 4.7.2

首先,我认为只通过一些配置而不是添加新方法或新控制器是无法实现版本控制的,因为我在官方文档中确实找不到。如果你坚持保持方法的唯一性,你不会添加新的方法或文件,你可以考虑azure api management。这是一个很棒的工具,但对于生产使用来说有点贵。

而且正如您所说,您仍然可以在应用程序中控制您的代码,我建议您添加一些代码来实现版本控制。这里a blog说了。它提供了一种类似的方式来实现您的目标 [ApiVersion("1.0")] and [Route("api/{v:apiVersion}/employee")].

还需要一个nuget包Microsoft.AspNetCore.Mvc.Versioning,配置在startup.cs

public void ConfigureServices(IServiceCollection services)  
{  
    services.AddControllers();  
    services.AddApiVersioning(x =>  
    {  
        x.DefaultApiVersion = new ApiVersion(1, 0);  
        x.AssumeDefaultVersionWhenUnspecified = true;  
        x.ReportApiVersions = true;  
    });  
}  

这是我的测试结果: