[英]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 for v2 在路線上,有沒有辦法做到這一點?
我想到了一種解決方法,即使用新路由、相同參數創建新控制器,但它必須在另一個文件中,而不是將它們放在一起。 有什么建議或者這是唯一的方法嗎? 提前致謝。 不幸的是,目標網絡是 4.7.2
首先,我不認為您可以僅通過一些配置而不添加新方法或新控制器來實現版本控制,因為我在官方文檔中確實沒有找到它。 如果你堅持保持方法的唯一性,你不會添加新的方法或文件,你可以考慮azure api 管理。 這是一個很棒的工具,但對於生產使用來說有點貴。
並且正如您提到的,您仍然可以在應用程序中控制您的代碼,我建議您添加一些代碼來實現版本控制。 這是一篇關於它的博客。 它通過屬性[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;
});
}
這是我的測試結果:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.